@latticexyz/world-modules 2.0.0-main-57d8965d → 2.0.0-main-de2decea

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"testEmitOnPuppet","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testEmitOnRootPuppet","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testMsgSender","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testMsgSenderRootPuppet","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Hello","inputs":[{"name":"msg","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x608060405260008054600160ff1991821681179092556004805490911690911790555a601c5561004e61737960f01b686e616d65737061636560b81b697465737453797374656d60b01b610063565b60205534801561005d57600080fd5b506100cd565b6000610071607060106100a6565b6001600160f01b03198516600160801b600160f01b03601086901c16176001600160801b0319841690911c1790509392505050565b808201808211156100c757634e487b7160e01b600052601160045260246000fd5b92915050565b6201b75b80620000de6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806385226c8111610097578063d81bebb911610066578063d81bebb914610194578063e20c9f711461019c578063f60736ce146101a4578063fa7626d4146101ac57600080fd5b806385226c8114610157578063916a17c61461016c578063b5508aa914610174578063ba414fa61461017c57600080fd5b80633ae50144116100d35780633ae501441461012a5780633e5e3c23146101325780633f7286f41461013a57806366d9a9a01461014257600080fd5b806306e28a34146100fa5780630a9254e4146101045780631ed7831c1461010c575b600080fd5b6101026101b9565b005b610102610251565b610114610331565b604051610121919061164b565b60405180910390f35b610102610393565b610114610593565b6101146105f3565b61014a610653565b6040516101219190611698565b61015f610757565b60405161012191906117b3565b61014a610827565b61015f610922565b6101846109f2565b6040519015158152602001610121565b610102610b34565b610114610b3c565b610102610b9c565b6000546101849060ff1681565b6101c1610ba4565b602154604080517fd737d0c7000000000000000000000000000000000000000000000000000000008152905161024f926001600160a01b03169163d737d0c79160048083019260209291908290030181865afa158015610225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610249919061182a565b30610e1a565b565b60405161025d906115db565b604051809103906000f080158015610279573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216918217905563c4d66de86102be610f3a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561031757600080fd5b505af115801561032b573d6000803e3d6000fd5b50505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561038957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161036b575b5050505050905090565b61039b610ba4565b6040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c290608401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050507fe762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d60405161048d906020808252600b908201527f68656c6c6f20776f726c64000000000000000000000000000000000000000000604082015260600190565b60405180910390a16021546040517f319585fb00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f68656c6c6f20776f726c6400000000000000000000000000000000000000000060448201526000916001600160a01b03169063319585fb906064016000604051808303816000875af1158015610527573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261054f91908101906118f1565b9050610590816040518060400160405280600b81526020017f68656c6c6f20776f726c64000000000000000000000000000000000000000000815250611036565b50565b6060600f805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b6060600e805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b60606012805480602002602001604051908101604052809291908181526020016000905b8282101561074e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561073657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116106e35790505b50505050508152505081526020019060010190610677565b50505050905090565b60606011805480602002602001604051908101604052809291908181526020016000905b8282101561074e57838290600052602060002001805461079a90611942565b80601f01602080910402602001604051908101604052809291908181526020018280546107c690611942565b80156108135780601f106107e857610100808354040283529160200191610813565b820191906000526020600020905b8154815290600101906020018083116107f657829003601f168201915b50505050508152602001906001019061077b565b60606013805480602002602001604051908101604052809291908181526020016000905b8282101561074e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561090a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116108b75790505b5050505050815250508152602001906001019061084b565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101561074e57838290600052602060002001805461096590611942565b80601f016020809104026020016040519081016040528092919081815260200182805461099190611942565b80156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050505081526020019060010190610946565b60008054610100900460ff1615610a125750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b2f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610ab7917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611995565b60408051601f1981840301815290829052610ad1916119dd565b6000604051808303816000865af19150503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5091505080806020019051810190610b2b91906119f9565b9150505b919050565b6101c161117c565b6060600c805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b61039b61117c565b601f546040516001600160a01b039091169063af068c9e90610bc5906115e9565b604051809103906000f080158015610be1573d6000803e3d6000fd5b50604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16909152610c2a919060248101611a1b565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b5050601f546020546001600160a01b03909116925063b29e40899150610cbd907dffffffffffffffffffffffffffff00000000000000000000000000000000167f6e730000000000000000000000000000000000000000000000000000000000001790565b6040518263ffffffff1660e01b8152600401610cdb91815260200190565b600060405180830381600087803b158015610cf557600080fd5b505af1158015610d09573d6000803e3d6000fd5b505050506000604051610d1b906115f7565b604051809103906000f080158015610d37573d6000803e3d6000fd5b50601f546020546040517f3350b6a900000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03808416602483015260016044830152929350911690633350b6a990606401600060405180830381600087803b158015610dac57600080fd5b505af1158015610dc0573d6000803e3d6000fd5b5050601f54602054610ddf93506001600160a01b03909116915061119d565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b806001600160a01b0316826001600160a01b031614610f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610eb89060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051610eef9190611a3d565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051610f269190611a91565b60405180910390a1610f3661149b565b5050565b6000604051610f4890611605565b604051809103906000f080158015610f64573d6000803e3d6000fd5b50604051610f7190611613565b604051809103906000f080158015610f8d573d6000803e3d6000fd5b50604051610f9a90611621565b604051809103906000f080158015610fb6573d6000803e3d6000fd5b50604051610fc39061162f565b604051809103906000f080158015610fdf573d6000803e3d6000fd5b50604051610fec9061163d565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015611030573d6000803e3d6000fd5b50905090565b8060405160200161104791906119dd565b604051602081830303815290604052805190602001208260405160200161106e91906119dd565b6040516020818303038152906040528051906020012014610f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405161110e9060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583826040516111459190611ace565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051610f269190611b1d565b601f546040516001600160a01b0390911690638da798da90610bc5906115e9565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526000916001600160a01b03851691633ae7af08910160405160208183030381529060405261124090611b5a565b6040516024810186905260440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb9eb8bfb00000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526112dd929190600401611b9c565b6000604051808303816000875af11580156112fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261132491908101906118f1565b806020019051810190611337919061182a565b90506001600160a01b03831663bfdfaff77f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff00000000000000000000000000000000851617604080517f737900000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201520160405160208183030381529060405261141a90611b5a565b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1690915261146392919060248101611bb5565b600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050505092915050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115ad5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f198184030181529082905261154c9291602001611995565b60408051601f1981840301815290829052611566916119dd565b6000604051808303816000865af19150503d80600081146115a3576040519150601f19603f3d011682016040523d82523d6000602084013e6115a8565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61553a8062001bde83390190565b615a5d806200711883390190565b610a97806200cb7583390190565b611a79806200d60c83390190565b6118cc806200f08583390190565b610b15806201095183390190565b61567c806201146683390190565b614c6d8062016ae283390190565b6020808252825182820181905260009190848201906040850190845b8181101561168c5783516001600160a01b031683529284019291840191600101611667565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561175457898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b8083101561173f5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b01906116fd565b50978a019795505050918701916001016116c0565b50919998505050505050505050565b60005b8381101561177e578181015183820152602001611766565b50506000910152565b6000815180845261179f816020860160208601611763565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180857603f198886030184526117f6858351611787565b945092850192908501906001016117da565b5092979650505050505050565b6001600160a01b038116811461059057600080fd5b60006020828403121561183c57600080fd5b815161184781611815565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156118985761189861184e565b604051601f8501601f19908116603f011681019082821181831017156118c0576118c061184e565b816040528093508581528686860111156118d957600080fd5b6118e7866020830187611763565b5050509392505050565b60006020828403121561190357600080fd5b815167ffffffffffffffff81111561191a57600080fd5b8201601f8101841361192b57600080fd5b61193a8482516020840161187d565b949350505050565b600181811c9082168061195657607f821691505b60208210810361198f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516119cf816004850160208701611763565b919091016004019392505050565b600082516119ef818460208701611763565b9190910192915050565b600060208284031215611a0b57600080fd5b8151801515811461184757600080fd5b6001600160a01b038316815260406020820152600061193a6040830184611787565b604081526000611a7a60408301600a81527f2020202020204c65667400000000000000000000000000000000000000000000602082015260400190565b90506001600160a01b038316602083015292915050565b604081526000611a7a60408301600a81527f2020202020526967687400000000000000000000000000000000000000000000602082015260400190565b604081526000611b0b60408301600a81527f2020202020204c65667400000000000000000000000000000000000000000000602082015260400190565b828103602084015261193a8185611787565b604081526000611b0b60408301600a81527f2020202020526967687400000000000000000000000000000000000000000000602082015260400190565b8051602080830151919081101561198f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b82815260406020820152600061193a6040830184611787565b838152826020820152606060408201526000611bd46060830184611787565b9594505050505056fe60a060405234801561001057600080fd5b506100477f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e17580546001600160a01b03191630179055565b6040516e0c4b8c0b8c0b5d5b985d591a5d1959608a1b907fc7f5fdc8526b76f54916701bc910876243ffff2a40b0bb8d59eea8151c52c00590600090a2336080526040516e0c4b8c0b8c0b5d5b985d591a5d1959608a1b907f7f8f36afe3fb61c459c1a54a60b8a477eab02cc58e49f547561a40906239cb8290600090a2608051615452620000e86000396000818161036f015261139601526154526000f3fe6080604052600436106101d15760003560e01c80638c364d59116100f7578063c4d66de811610095578063d9c03a0411610064578063d9c03a04146106d1578063dbbf0e21146105d1578063e228a4a3146106f1578063ef6ea8621461071157610266565b8063c4d66de814610651578063cc49db7e14610671578063d03edb8c14610691578063d4285dc2146106b157610266565b8063af068c9e116100d1578063af068c9e146105f1578063b047c1eb14610611578063c0a2895a14610631578063c11222291461054b57610266565b80638c364d59146105915780639f1fcf0a146105b1578063a53417ed146105d157610266565b8063390baae01161016f5780634dc77d971161013e5780634dc77d971461050b578063505a181d1461052b5780636951955d1461054b578063894ecc581461057e57610266565b8063390baae01461047b5780633a77c2c21461049b5780633ae7af08146104c9578063419b58fd146104dc57610266565b8063150f3262116101ab578063150f3262146103fb5780631e7889771461041b578063298314fb1461043b5780633708196e1461045b57610266565b806302d05d3f1461035d57806305242d2f146103ae578063114a7266146103db57610266565b366102665760408051616e7360f01b6020820152600060228201819052603082018190529161021891016040516020818303038152906040526102139061459d565b610731565b60408051616e7360f01b6020820152600060228201819052603082015291925061026491016040516020818303038152906040526102559061459d565b61025f34846145da565b61080f565b005b303303610299576040516327a1460b60e21b81526001600160e01b03196000351660048201526024015b60405180910390fd5b6000806102b16000356001600160e01b031916610901565b91509150816000801b036102ff576040517ffdde54e20000000000000000000000000000000000000000000000000000000081526001600160e01b0319600035166004820152602401610290565b60006103436000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250869150610a119050565b9050600061035333858434610a44565b9050805160208201f35b34801561036957600080fd5b506103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103ba57600080fd5b506103ce6103c936600461464a565b610a71565b6040516103a59190614700565b3480156103e757600080fd5b506102646103f6366004614755565b610ab4565b34801561040757600080fd5b50610264610416366004614755565b610b67565b34801561042757600080fd5b506103ce6104363660046147e2565b610c12565b34801561044757600080fd5b50610264610456366004614840565b610c5c565b34801561046757600080fd5b506102646104763660046148ed565b610d45565b34801561048757600080fd5b506102646104963660046148ed565b610dfb565b3480156104a757600080fd5b506104bb6104b6366004614983565b610ea8565b6040519081526020016103a5565b6103ce6104d7366004614a53565b610eb9565b3480156104e857600080fd5b506104fc6104f7366004614a9a565b610ef5565b6040516103a593929190614aed565b34801561051757600080fd5b506103ce610526366004614b8d565b610f4a565b34801561053757600080fd5b50610264610546366004614bf6565b610f59565b34801561055757600080fd5b507f312e302e302d756e6175646974656400000000000000000000000000000000006104bb565b6103ce61058c366004614c57565b610fce565b34801561059d57600080fd5b506104bb6105ac36600461464a565b61112a565b3480156105bd57600080fd5b506104bb6105cc366004614cb0565b61116d565b3480156105dd57600080fd5b506104bb6105ec366004614d0f565b61117b565b3480156105fd57600080fd5b5061026461060c366004614d66565b611188565b34801561061d57600080fd5b5061026461062c366004614da0565b611204565b34801561063d57600080fd5b5061026461064c366004614e2f565b6112af565b34801561065d57600080fd5b5061026461066c366004614ebc565b61135d565b34801561067d57600080fd5b506104fc61068c366004614bf6565b6114d8565b34801561069d57600080fd5b506103ce6106ac3660046147e2565b61152a565b3480156106bd57600080fd5b506104bb6106cc366004614983565b61156b565b3480156106dd57600080fd5b506102646106ec36600461464a565b611576565b3480156106fd57600080fd5b506104bb61070c366004614983565b6115f6565b34801561071d57600080fd5b5061026461072c366004614755565b611601565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061076a5761076a614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e636573000000000000000000000000000000000000000000000000603083015260009161080791015b6040516020818303038152906040526107df9061459d565b8360007e200100200000000000000000000000000000000000000000000000000000006116ac565b949350505050565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061084557610845614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015281518082039093018352810190526108fc906108b19061459d565b826000856040516020016108c791815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006116d9565b505050565b6040805160018082528183019092526000918291829160208083019080368337019050509050837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061095a5761095a614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f720000000000000000000000000000000060308201528151808203909301835281019052600090819081906109f3906109cd9061459d565b857e240200200400000000000000000000000000000000000000000000000000006116ee565b925092509250610a048383836117f6565b9550955050505050915091565b82820160200180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682179052825b9392505050565b6060600080610a558787878761180e565b9150915081610a6757610a67816119f2565b9695505050505050565b6060610a67868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791506119fa9050565b303303610ae2576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610aec8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611a8b92505050565b505050505050565b303303610b95576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610b9f8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611aa692505050565b6060610c5385858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250611ae1915050565b95945050505050565b303303610c8a576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610c948833611a3f565b610d3b8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250611b1b92505050565b5050505050505050565b303303610d73576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610d7d8733611a3f565b610df28787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250889250611b31915050565b50505050505050565b303303610e29576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610e338733611a3f565b610df28787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152508892506116d9915050565b6000610eb382611b74565b92915050565b6060303303610ee9576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610a3d33848434610a44565b606060006060610f3a878787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506116ee915050565b9250925092509450945094915050565b6060610a678686868686611c44565b303303610f87576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610f918333611a3f565b6108fc83838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611d0592505050565b6060303303610ffe576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b336001600160a01b038516036110215761101a33848434610a44565b9050610a3d565b600061102d8533611d18565b905061103c8186338787611dea565b156110555761104d85858534610a44565b915050610a3d565b6000611062866000611d18565b90506110718187338888611dea565b1561108b5761108286868634610a44565b92505050610a3d565b60006110bd616e7360f01b7dffffffffffffffffffffffffffff00000000000000000000000000000000881617611ebf565b90506110cc8188338989611dea565b156110e7576110dd87878734610a44565b9350505050610a3d565b6040517fc86745f90000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152336024820152604401610290565b6000610a67868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791506116ac9050565b6000610c5385858585611f59565b6000610807848484611fa1565b3033036111b6576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b60408051616e7360f01b602082015260006022820181905260308201526111f691016040516020818303038152906040526111f09061459d565b33611fb7565b6112008282612008565b5050565b303303611232576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b61123c8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061211a92505050565b3033036112dd576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6112e78833611a3f565b610d3b8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528b93508a9250899189908990819084018382808284376000920191909152506123c992505050565b30330361138b576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461142f5760408051616e7360f01b602082015260006022820181905260308201526113fa91016040516020818303038152906040526113f59061459d565b6123e1565b336040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610290929190614eef565b600061147b7f636f7265000000000000000000000000000000000000000000000000000000007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061250f565b6001600160a01b0316146114bb576040517f15e34a4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008152602081019091526114d5908290612008565b50565b60606000606061151b8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061262492505050565b92509250925093509350939050565b6060610c538585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525087925061264a915050565b6000610eb382612660565b3033036115a4576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6115ae8533611a3f565b6115ef858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792508691506126d49050565b5050505050565b6000610eb38261272d565b30330361162f576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6116398633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061275392505050565b6000610c536116bb868661278e565b60ff858116601b0360080285901c166116d485876127e4565b612827565b6115ef85856116e884876127e4565b8561211a565b60606000606060006116ff85612878565b905061170c87878361289b565b93506000611719866128d4565b905080156117eb5761172b8888612911565b935066ffffffffffffff841667ffffffffffffffff81111561174f5761174f61499c565b6040519080825280601f01601f191660200182016040528015611779576020820181803683370190505b5092506020830160005b828160ff1610156117e857600061179b8b8b84612924565b905060006117b8888460ff166028026038011c64ffffffffff1690565b90506117c782600083876129a4565b6117d181856145da565b9350505080806117e090614f1a565b915050611783565b50505b505093509350939050565b60008061180285612a73565b90969095509350505050565b60006060600061181d86612a88565b905060005b81518110156118fa57600082828151811061183f5761183f614ed9565b6020026020010151905061186b6001826affffffffffffffffffffff1916612b5690919063ffffffff16565b156118e7576040517fc3323031000000000000000000000000000000000000000000000000000000008152606082901c9063c3323031906118b4908c908c908c90600401614f39565b600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505050505b50806118f281614f61565b915050611822565b5061190787858888612b74565b909350915060005b81518110156119e757600082828151811061192c5761192c614ed9565b602002602001015190506119586002826affffffffffffffffffffff1916612b5690919063ffffffff16565b156119d4576040517f973d8f99000000000000000000000000000000000000000000000000000000008152606082901c9063973d8f99906119a1908c908c908c90600401614f39565b600060405180830381600087803b1580156119bb57600080fd5b505af11580156119cf573d6000803e3d6000fd5b505050505b50806119df81614f61565b91505061190f565b505094509492505050565b805160208201fd5b6060611a0582612c8f565b8360ff161015611a2257611a1b85858585612ca1565b9050610807565b611a1b8585611a3085612c8f565b611a3a9087614f7b565b611ae1565b611a498282612cce565b61120057611a56826123e1565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610290929190614eef565b611aa084848484611a9b89611b74565b611b31565b50505050565b6000611ab28585612911565b90506000611acf828560ff166028026038011c64ffffffffff1690565b9050610b5f8686868460008888612d11565b6060610807611af1858585612924565b6000611b1685611b018989612911565b9060ff166028026038011c64ffffffffff1690565b613127565b6115ef8585858585611b2c8b611b74565b61314a565b611b3a81612c8f565b8360ff161015611b5657611b5185858585856116d9565b6115ef565b6115ef8585611b6484612c8f565b611b6e9087614f7b565b85612753565b60408051613a3160f11b60208201526473746f726560d81b6022820152655461626c657360d01b603082015260009101604051602081830303815290604052611bbc9061459d565b8203611be857507e60030220202000000000000000000000000000000000000000000000000000919050565b60408051613a3160f11b60208201526473746f726560d81b6022820152655461626c657360d01b6030820152610eb391611c3b9101604051602081830303815290604052611c359061459d565b846134a3565b60206000612827565b60606000611c528787612911565b90506000611c6f828760ff166028026038011c64ffffffffff1690565b90508085101580611c7f57508084115b15611cda578081861015611c9d57611c98600186614f94565b611c9f565b855b6040517f7e8578d300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610290565b6000611ce7898989612924565b9050611cf88187611b168189614f94565b9998505050505050505050565b6112008282611d1385611b74565b6134bf565b60408051600280825260608201835260009283929190602083019080368337019050509050836001600160a01b031660001b81600081518110611d5d57611d5d614ed9565b602002602001018181525050826001600160a01b031660001b81600181518110611d8957611d89614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5573657244656c65676174696f6e436f000000000000000000000000000000006030830152600091610c5391016107c7565b6000611df5866137d2565b15611e0257506001610c53565b85611e0f57506000610c53565b600080611e8b8660008a8a8989604051602401611e2e93929190614f39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1a86b55000000000000000000000000000000000000000000000000000000000179052612b74565b9150915081611e9f57600092505050610c53565b80806020019051810190611eb39190614fa7565b98975050505050505050565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611ef857611ef8614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d65737061636544656c6567617400000000000000000000000000000000603083015260009161080791016107c7565b600080611f6583612c8f565b90508060ff168460ff161015611f8d5760ff848116601b0360080284901c165b915050610807565b611f858686611f9c8488614f7b565b61384d565b6000610807848484611fb288611b74565b611f59565b6001600160a01b038116611ff1616e7360f01b7dffffffffffffffffffffffffffff0000000000000000000000000000000085161761385d565b6001600160a01b03161461120057611a56826123e1565b612032827f780ac2fc00000000000000000000000000000000000000000000000000000000613902565b6120a7336000848460405160240161204a9190614700565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7c5b03350000000000000000000000000000000000000000000000000000000017905261395d565b50611200826001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614fc9565b825160208401208461396e565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff00000000000000000000000000000000000000000000000000000000000016036121a457837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161219793929190615037565b60405180910390a2611aa0565b60006121b0858561278e565b905060006121bd86613aae565b905060005b815181101561229c5760008282815181106121df576121df614ed9565b6020026020010151905061220b6004826affffffffffffffffffffff1916612b5690919063ffffffff16565b15612289576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90612256908b908b908b908b9060040161506a565b600060405180830381600087803b15801561227057600080fd5b505af1158015612284573d6000803e3d6000fd5b505050505b508061229481614f61565b9150506121c2565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8686866040516122d193929190615037565b60405180910390a26122ec828565ffffffffffff1685613b49565b60005b8151811015610df257600082828151811061230c5761230c614ed9565b602002602001015190506123386008826affffffffffffffffffffff1916612b5690919063ffffffff16565b156123b6576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190612383908b908b908b908b9060040161506a565b600060405180830381600087803b15801561239d57600080fd5b505af11580156123b1573d6000803e3d6000fd5b505050505b50806123c181614f61565b9150506122ef565b610b5f8686868686866123dc8d8d612911565b612d11565b606081601081901b60006123f483613b5f565b9050827fffffffffffffffffffffffffffff00000000000000000000000000000000000083161561244f5761244a7fffffffffffffffffffffffffffff0000000000000000000000000000000000008416613b76565b612486565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6fffffffffffffffffffffffffffffffff198316156124ad576124a883613b76565b6124e4565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016124f6939291906150a3565b6040516020818303038152906040529350505050919050565b60408051600280825260608201835260009283929190602083019080368337019050509050836fffffffffffffffffffffffffffffffff19168160008151811061255b5761255b614ed9565b602002602001018181525050828160018151811061257b5761257b614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f496e7374616c6c65644d6f64756c657300000000000000000000000000000000603083015260009161261891015b6040516020818303038152906040526125f09061459d565b8360007e140100140000000000000000000000000000000000000000000000000000006116ac565b60601c95945050505050565b60606000606061263d858561263888611b74565b6116ee565b9250925092509250925092565b606061080784848461265b88611b74565b6119fa565b600061266b82613c06565b905061267682613cbf565b6126cf57818260405160200161268e91815260200190565b60408051601f19818403018152908290527f41e713ad0000000000000000000000000000000000000000000000000000000082526102909291600401615131565b919050565b60006126e08585612911565b905060006126fd828560ff166028026038011c64ffffffffff1690565b9050610b5f8686866127168764ffffffffff8716614f94565b604080516000815260208101909152889088612d11565b600061273882613da1565b9050806126cf57818260405160200161268e91815260200190565b600061275f8585612911565b9050600061277c828560ff166028026038011c64ffffffffff1690565b9050610b5f8686866000858888612d11565b600082826040516020016127a392919061514a565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561281f5761280b60ff601b83900360080287901c16836145da565b91508061281781614f61565b9150506127e9565b509392505050565b60006020821061284d5760208204840193506020828161284957612849615185565b0691505b508254600882021b60208290038084111561281f576001850154600882021c82179150509392505050565b6000600861288860026020614f94565b612892919061519b565b9190911c919050565b6060816000036128ba5750604080516020810190915260008152610a3d565b60006128c6858561278e565b9050610c5381600085613127565b600060086001806128e760026020614f94565b6128f19190614f94565b6128fb9190614f94565b612905919061519b565b8260ff911c1692915050565b6000610a3d6129208484613e5a565b5490565b6000838360405160200161293992919061514a565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b8215612a2d57602083106129ce576020830484019350602083816129ca576129ca615185565b0692505b8215612a2d5760208390036000818410156129f25750600019600884021c196129fd565b50600019600882021c195b8554600886021b811984511682821617845250818411612a1e575050611aa0565b50600194909401939182900391015b5b60208210612a4f5783548152600190930192601f1990910190602001612a2e565b8115611aa0576000600019600884021c198251865482169119161782525050505050565b602081015160408201516000905b9050915091565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612ac257612ac2614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b730000000000000000000000000000000000000000006030830152600091612b3f91015b604051602081830303815290604052612b379061459d565b836000611ae1565b9050610807612b518260008451613eb0565b613f40565b60008160ff1682612b678560581c90565b1660ff1614905092915050565b60006060600080612b8486613f51565b90925090506001600160a01b038216612bd55785612ba1876123e1565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610290929190615131565b80612be457612be48689611a3f565b8615612c30577dffffffffffffffffffffffffffff000000000000000000000000000000008616616e7360f01b176000612c1d82610731565b9050612c2d8261025f8b846145da565b50505b6000612c3c8760101b90565b7fffffffffffffffffffffffffffff0000000000000000000000000000000000001614612c7457612c6f88888488614035565b612c80565b612c80888884886140ad565b90999098509650505050505050565b6000600860016128f160026020614f94565b6060610c53612cb0868661278e565b612cba84866127e4565b60ff868116601b0360080286901c16613127565b6000612d01616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008516178361410e565b80610a3d5750610a3d838361410e565b613a3160f11b877fffff0000000000000000000000000000000000000000000000000000000000001614612d9b57613a3160f11b8788604051602001612d5991815260200190565b60408051601f19818403018152908290527f31b466830000000000000000000000000000000000000000000000000000000082526102909392916004016151b2565b6000612db6828760ff166028026038011c64ffffffffff1690565b9050600083518564ffffffffff1683612dcf9190614f94565b612dd991906145da565b9050808214158015612dfb575081612df186886151f3565b64ffffffffff1614155b15612e4b576040517fa65010b400000000000000000000000000000000000000000000000000000000815264ffffffffff8088166004830152808716602483015283166044820152606401610290565b818664ffffffffff161115612e9c576040517f7e8578d30000000000000000000000000000000000000000000000000000000081526004810183905264ffffffffff87166024820152604401610290565b6000612ea98489846141e0565b90506000612eb68b613aae565b905060005b8151811015612f8b576000828281518110612ed857612ed8614ed9565b60200260200101519050612f046010826affffffffffffffffffffff1916612b5690919063ffffffff16565b15612f7857606081901c6001600160a01b03166355eb5a288e8e8e8e8e8d8f6040518863ffffffff1660e01b8152600401612f459796959493929190615218565b600060405180830381600087803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b505050505b5080612f8381614f61565b915050612ebb565b5064ffffffffff881660005b8a60ff168160ff161015612fca57612fbe878260ff166028026038011c64ffffffffff1690565b90910190600101612f97565b508b7faa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b48c838b878c604051613003959493929190615276565b60405180910390a25082841461302457600061301f8c8c613e5a565b839055505b60006130318c8c8c612924565b9050613045818a64ffffffffff1689613b49565b5060005b815181101561311957600082828151811061306657613066614ed9565b602002602001015190506130926020826affffffffffffffffffffff1916612b5690919063ffffffff16565b1561310657606081901c6001600160a01b031663635845338e8e8e8e8e8a8f6040518863ffffffff1660e01b81526004016130d39796959493929190615218565b600060405180830381600087803b1580156130ed57600080fd5b505af1158015613101573d6000803e3d6000fd5b505050505b508061311181614f61565b915050613049565b505050505050505050505050565b60405160208101601f19603f848401011660405282825261281f858585846129a4565b7f6f74000000000000000000000000000000000000000000000000000000000000867fffff00000000000000000000000000000000000000000000000000000000000016036131d657857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9868686866040516131c994939291906152bc565b60405180910390a2610b5f565b60006131e187613aae565b905060005b81518110156132c457600082828151811061320357613203614ed9565b6020026020010151905061322f6001826affffffffffffffffffffff1916612b5690919063ffffffff16565b156132b1576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c9061327e908c908c908c908c908c908c906004016152fb565b600060405180830381600087803b15801561329857600080fd5b505af11580156132ac573d6000803e3d6000fd5b505050505b50806132bc81614f61565b9150506131e6565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9878787876040516132fb94939291906152bc565b60405180910390a2600061330f888861278e565b905060006020870190506133278260008951846142ae565b6000613332856128d4565b11156133b65760006133448a8a613e5a565b878155905060208601915060008060005b61335e886128d4565b8160ff1610156133b1576133738d8d83612924565b925061338e8a8260ff166028026038011c64ffffffffff1690565b915061339d83600084886142ae565b6133a782866145da565b9450600101613355565b505050505b60005b83518110156134975760008482815181106133d6576133d6614ed9565b602002602001015190506134026002826affffffffffffffffffffff1916612b5690919063ffffffff16565b15613484576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90613451908e908e908e908e908e908e906004016152fb565b600060405180830381600087803b15801561346b57600080fd5b505af115801561347f573d6000803e3d6000fd5b505050505b508061348f81614f61565b9150506133b9565b50505050505050505050565b60408051602081018490529081018290526000906060016127a3565b7f6f74000000000000000000000000000000000000000000000000000000000000837fffff000000000000000000000000000000000000000000000000000000000000160361354557827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d07836040516135389190615354565b60405180910390a2505050565b600061355084613aae565b905060005b815181101561362d57600082828151811061357257613572614ed9565b6020026020010151905061359e6040826affffffffffffffffffffff1916612b5690919063ffffffff16565b1561361a576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf45906135e790899089908990600401615367565b600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b505050505b508061362581614f61565b915050613555565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d078460405161365e9190615354565b60405180910390a26000613672858561278e565b90506136cb81600061368386612878565b67ffffffffffffffff81111561369b5761369b61499c565b6040519080825280601f01601f1916602001820160405280156136c5576020820181803683370190505b50613b49565b60006136d6846128d4565b11156136f75760006136e88686613e5a565b90506136f581602061436e565b505b60005b8251811015610b5f57600083828151811061371757613717614ed9565b602002602001015190506137436080826affffffffffffffffffffff1916612b5690919063ffffffff16565b156137bf576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b9061378c908a908a908a90600401615367565b600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050505b50806137ca81614f61565b9150506136fa565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201526000602282018190527f756e6c696d697465640000000000000000000000000000000000000000000000603083015291016040516020818303038152906040526138459061459d565b909114919050565b600061080782611b018686612911565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061389657613896614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d6573706163654f776e657200000000000000000000000000000000000060308301526000916138f791016125d8565b60601c949350505050565b61390c82826143ab565b611200576040517f74b5e6ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526001600160e01b031982166024820152604401610290565b6060600080610a55878787876140ad565b604080516002808252606082018352600092602083019080368337019050509050836fffffffffffffffffffffffffffffffff1916816000815181106139b6576139b6614ed9565b60200260200101818152505082816001815181106139d6576139d6614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f496e7374616c6c65644d6f64756c65730000000000000000000000000000000060308201528151808203909301835281019052611aa090613a429061459d565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006116d9565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613ae857613ae8614ed9565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b73000000000000000000000000000000000000000000006030830152600091612b3f9101612b1f565b6108fc83838351613b5a8560200190565b6142ae565b6000613b6d607060106145da565b9190911b919050565b606060005b6010811015613bd6576fffffffffffffffffffffffffffffffff198316600882021b7fff000000000000000000000000000000000000000000000000000000000000001615613bd65780613bce81614f61565b915050613b7b565b604080516fffffffffffffffffffffffffffffffff19851660208201528151603090910190915281815280610807565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613c3f57613c3f614ed9565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b6022820152655461626c657360d01b6030820152815180820390930183528101905260009061080790613c979061459d565b8360017e600302202020000000000000000000000000000000000000000000000000006116ac565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613cf857613cf8614ed9565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f757263654964730000000000000000000000000000000000000000006030830152600091613d9591015b604051602081830303815290604052613d6d9061459d565b8360007e010100010000000000000000000000000000000000000000000000000000006116ac565b90506108078160f81c90565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613dda57613dda614ed9565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b6022820152655461626c657360d01b6030820152815180820390930183528101905260009061080790613e329061459d565b8360027e600302202020000000000000000000000000000000000000000000000000006116ac565b60008282604051602001613e6f92919061514a565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000818311158015613ec3575083518211155b613eff578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161029093929190615390565b60208401613f0d84826145da565b90506000613f1b8585614f94565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000610a3d83601560006143c7565b60408051600180825281830190925260009182918291602080830190803683370190505090508381600081518110613f8b57613f8b614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000908190819061402490613ffe9061459d565b857e150200140100000000000000000000000000000000000000000000000000006116ee565b925092509250610a04838383614442565b60006060836001600160a01b0316600061405085898961444e565b60405161405d91906153b5565b60006040518083038185875af1925050503d806000811461409a576040519150601f19603f3d011682016040523d82523d6000602084013e61409f565b606091505b509097909650945050505050565b60006060836001600160a01b03166140c684888861444e565b6040516140d391906153b5565b600060405180830381855af49150503d806000811461409a576040519150601f19603f3d011682016040523d82523d6000602084013e61409f565b60408051600280825260608201835260009283929190602083019080368337019050509050838160008151811061414757614147614ed9565b602002602001018181525050826001600160a01b031660001b8160018151811061417357614173614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f7572636541636365737300000000000000000000000000000000000060308301526000916141d49101613d55565b9050610c538160f81c90565b600064ffffffffff821115614224576040517f4767058800000000000000000000000000000000000000000000000000000000815260048101839052602401610290565b8366ffffffffffffff811660ff851660280260380182901c64ffffffffff16808510614256578085038201915061425e565b848103820391505b5064ffffffffff6038602860ff8816020181811b197fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009490941690921792909216918416901b1790509392505050565b821561432857602083106142d8576020830484019350602083816142d4576142d4615185565b0692505b82156143285760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411614319575050611aa0565b50600194909401939182900391015b5b6020821061434a5780518455600190930192601f1990910190602001614329565b8115611aa0576000600019600884021c198554835182169119161785555050505050565b6000602061437d83601f6145da565b61438791906153d1565b61439190846145da565b90505b808310156108fc5760008355600183019250614394565b60006143b68361447d565b8015610a3d5750610a3d83836144c9565b606060006143d58560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816143fb576143fb615185565b04905060405193506020840160208202810160405281855260005b82811015614436578451871c825293870193602090910190600101614416565b50505050509392505050565b60008061180285614581565b6060838383604051602001614465939291906153f3565b60405160208183030381529060405290509392505050565b60006144a9827f01ffc9a7000000000000000000000000000000000000000000000000000000006144c9565b8015610eb357506144c2826001600160e01b03196144c9565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d9150600051905082801561456a575060208210155b80156145765750600081115b979650505050505050565b6020810151603482015160609190911c9060009060f81c612a81565b805160208083015191908110156145be576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610eb357610eb36145c4565b60008083601f8401126145ff57600080fd5b50813567ffffffffffffffff81111561461757600080fd5b6020830191508360208260051b850101111561463257600080fd5b9250929050565b803560ff811681146126cf57600080fd5b60008060008060006080868803121561466257600080fd5b85359450602086013567ffffffffffffffff81111561468057600080fd5b61468c888289016145ed565b909550935061469f905060408701614639565b949793965091946060013592915050565b60005b838110156146cb5781810151838201526020016146b3565b50506000910152565b600081518084526146ec8160208601602086016146b0565b601f01601f19169290920160200192915050565b602081526000610a3d60208301846146d4565b60008083601f84011261472557600080fd5b50813567ffffffffffffffff81111561473d57600080fd5b60208301915083602082850101111561463257600080fd5b6000806000806000806080878903121561476e57600080fd5b86359550602087013567ffffffffffffffff8082111561478d57600080fd5b6147998a838b016145ed565b90975095508591506147ad60408a01614639565b945060608901359150808211156147c357600080fd5b506147d089828a01614713565b979a9699509497509295939492505050565b600080600080606085870312156147f857600080fd5b84359350602085013567ffffffffffffffff81111561481657600080fd5b614822878288016145ed565b9094509250614835905060408601614639565b905092959194509250565b60008060008060008060008060a0898b03121561485c57600080fd5b88359750602089013567ffffffffffffffff8082111561487b57600080fd5b6148878c838d016145ed565b909950975060408b01359150808211156148a057600080fd5b6148ac8c838d01614713565b909750955060608b0135945060808b01359150808211156148cc57600080fd5b506148d98b828c01614713565b999c989b5096995094979396929594505050565b600080600080600080600060a0888a03121561490857600080fd5b87359650602088013567ffffffffffffffff8082111561492757600080fd5b6149338b838c016145ed565b909850965086915061494760408b01614639565b955060608a013591508082111561495d57600080fd5b5061496a8a828b01614713565b989b979a50959894979596608090950135949350505050565b60006020828403121561499557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156149db576149db61499c565b604052919050565b600082601f8301126149f457600080fd5b813567ffffffffffffffff811115614a0e57614a0e61499c565b614a216020601f19601f840116016149b2565b818152846020838601011115614a3657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614a6657600080fd5b82359150602083013567ffffffffffffffff811115614a8457600080fd5b614a90858286016149e3565b9150509250929050565b60008060008060608587031215614ab057600080fd5b84359350602085013567ffffffffffffffff811115614ace57600080fd5b614ada878288016145ed565b9598909750949560400135949350505050565b606081526000614b0060608301866146d4565b8460208401528281036040840152610a6781856146d4565b600082601f830112614b2957600080fd5b8135602067ffffffffffffffff821115614b4557614b4561499c565b8160051b614b548282016149b2565b9283528481018201928281019087851115614b6e57600080fd5b83870192505b8483101561457657823582529183019190830190614b74565b600080600080600060a08688031215614ba557600080fd5b85359450602086013567ffffffffffffffff811115614bc357600080fd5b614bcf88828901614b18565b945050614bde60408701614639565b94979396509394606081013594506080013592915050565b600080600060408486031215614c0b57600080fd5b83359250602084013567ffffffffffffffff811115614c2957600080fd5b614c35868287016145ed565b9497909650939450505050565b6001600160a01b03811681146114d557600080fd5b600080600060608486031215614c6c57600080fd5b8335614c7781614c42565b925060208401359150604084013567ffffffffffffffff811115614c9a57600080fd5b614ca6868287016149e3565b9150509250925092565b60008060008060808587031215614cc657600080fd5b84359350602085013567ffffffffffffffff811115614ce457600080fd5b614cf087828801614b18565b935050614cff60408601614639565b9396929550929360600135925050565b600080600060608486031215614d2457600080fd5b83359250602084013567ffffffffffffffff811115614d4257600080fd5b614d4e86828701614b18565b925050614d5d60408501614639565b90509250925092565b60008060408385031215614d7957600080fd5b8235614d8481614c42565b9150602083013567ffffffffffffffff811115614a8457600080fd5b60008060008060008060808789031215614db957600080fd5b86359550602087013567ffffffffffffffff80821115614dd857600080fd5b614de48a838b016145ed565b90975095506040890135915065ffffffffffff82168214614e0457600080fd5b909350606088013590808211156147c357600080fd5b803564ffffffffff811681146126cf57600080fd5b60008060008060008060008060c0898b031215614e4b57600080fd5b88359750602089013567ffffffffffffffff80821115614e6a57600080fd5b614e768c838d016145ed565b9099509750879150614e8a60408c01614639565b9650614e9860608c01614e1a565b9550614ea660808c01614e1a565b945060a08b01359150808211156148cc57600080fd5b600060208284031215614ece57600080fd5b8135610a3d81614c42565b634e487b7160e01b600052603260045260246000fd5b604081526000614f0260408301856146d4565b90506001600160a01b03831660208301529392505050565b600060ff821660ff8103614f3057614f306145c4565b60010192915050565b6001600160a01b0384168152826020820152606060408201526000610c5360608301846146d4565b60006000198203614f7457614f746145c4565b5060010190565b60ff8281168282160390811115610eb357610eb36145c4565b81810381811115610eb357610eb36145c4565b600060208284031215614fb957600080fd5b81518015158114610a3d57600080fd5b600060208284031215614fdb57600080fd5b81516fffffffffffffffffffffffffffffffff1981168114610a3d57600080fd5b600081518084526020808501945080840160005b8381101561502c57815187529582019590820190600101615010565b509495945050505050565b60608152600061504a6060830186614ffc565b65ffffffffffff851660208401528281036040840152610a6781856146d4565b8481526080602082015260006150836080830186614ffc565b65ffffffffffff85166040840152828103606084015261457681856146d4565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516151048160038601602089016146b0565b8084019050816003820152845191506151248260048301602088016146b0565b0160040195945050505050565b82815260406020820152600061080760408301846146d4565b82815260006020808301845182860160005b828110156151785781518452928401929084019060010161515c565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b8082028115828204841417610eb357610eb36145c4565b7fffff00000000000000000000000000000000000000000000000000000000000084168152826020820152606060408201526000610c5360608301846146d4565b64ffffffffff818116838216019080821115615211576152116145c4565b5092915050565b87815260e06020820152600061523160e0830189614ffc565b60ff8816604084015264ffffffffff87811660608501528616608084015260a0830185905282810360c084015261526881856146d4565b9a9950505050505050505050565b60a08152600061528960a0830188614ffc565b65ffffffffffff8716602084015264ffffffffff861660408401528460608401528281036080840152611eb381856146d4565b6080815260006152cf6080830187614ffc565b82810360208401526152e181876146d4565b9050846040840152828103606084015261457681856146d4565b86815260c06020820152600061531460c0830188614ffc565b828103604084015261532681886146d4565b9050856060840152828103608084015261534081866146d4565b9150508260a0830152979650505050505050565b602081526000610a3d6020830184614ffc565b8381526060602082015260006153806060830185614ffc565b9050826040830152949350505050565b6060815260006153a360608301866146d4565b60208301949094525060400152919050565b600082516153c78184602087016146b0565b9190910192915050565b6000826153ee57634e487b7160e01b600052601260045260246000fd5b500490565b600084516154058184602089016146b0565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815260148101919091526034019291505056fea164736f6c6343000815000a60c0604052604051620000129062000088565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b03166080526040516200004a9062000096565b604051809103906000f08015801562000067573d6000803e3d6000fd5b506001600160a01b031660a0523480156200008157600080fd5b50620000a4565b61087d8062002ad783390190565b612709806200335483390190565b60805160a0516129ff620000d8600039600081816103ed015261075c0152600081816104fa01526108b101526129ff6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806317d7de7c1161005b57806317d7de7c146100df57806345ec9354146100f65780637c5b033514610109578063e1af802c1461011c57600080fd5b806301ffc9a714610082578063119df25f146100aa57806313861fb5146100ca575b600080fd5b6100956100903660046124be565b610124565b60405190151581526020015b60405180910390f35b6100b2610209565b6040516001600160a01b0390911681526020016100a1565b6100dd6100d8366004612516565b610218565b005b604051651c1d5c1c195d60d21b81526020016100a1565b604051601f1936013581526020016100a1565b6100dd610117366004612516565b61055f565b6100b2610987565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780ac2fc0000000000000000000000000000000000000000000000000000000014806101b757507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b8061020357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000610213610991565b905090565b6000610222610987565b6040517f6e730000000000000000000000000000000000000000000000000000000000006020820152651c1d5c1c195d60d21b60228201529091506001600160a01b0382169063b29e408990603001604051602081830303815290604052610289906125c7565b6040518263ffffffff1660e01b81526004016102a791815260200190565b600060405180830381600087803b1580156102c157600080fd5b505af11580156102d5573d6000803e3d6000fd5b505060408051613a3160f11b6020820152651c1d5c1c195d60d21b60228201527f5075707065745265676973747279000000000000000000000000000000000000603082015261034193500190505b60405160208183030381529060405261033c906125c7565b6109c3565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526001600160a01b03831691633350b6a991016040516020818303038152906040526103af906125c7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260016044820152606401600060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b50506040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201526001600160a01b0385169350633350b6a99250016040516020818303038152906040526104bc906125c7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260016044820152606401600060405180830381600087803b15801561054357600080fd5b505af1158015610557573d6000803e3d6000fd5b505050505050565b6000610569610987565b6040517f6e730000000000000000000000000000000000000000000000000000000000006020820152651c1d5c1c195d60d21b602282015290915060009081906001600160a01b03841690819063b29e4089906030016040516020818303038152906040526105d7906125c7565b6040516024016105e991815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b939093179092529051610636925061260f565b600060405180830381855af49150503d8060008114610671576040519150601f19603f3d011682016040523d82523d6000602084013e610676565b606091505b5091509150816106895761068981610a0f565b60408051613a3160f11b6020820152651c1d5c1c195d60d21b60228201527f507570706574526567697374727900000000000000000000000000000000000060308201526106d79101610324565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526001600160a01b038516918291633350b6a99101604051602081830303815290604052610747906125c7565b60405160248101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660448201526001606482015260840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516107d8925061260f565b600060405180830381855af49150503d8060008114610813576040519150601f19603f3d011682016040523d82523d6000602084013e610818565b606091505b5090925090508161082c5761082c81610a0f565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201526001600160a01b038516918291633350b6a9910160405160208183030381529060405261089c906125c7565b60405160248101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660448201526001606482015260840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b93909317909252905161092d925061260f565b600060405180830381855af49150503d8060008114610968576040519150601f19603f3d011682016040523d82523d6000602084013e61096d565b606091505b509092509050816109815761098181610a0f565b50505050565b6000610213610a17565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806109c05750335b90565b610a0c817e140100140000000000000000000000000000000000000000000000000000006109ef610a56565b6109f7610ace565b6109ff610b08565b610a07610b8d565b610bed565b50565b805160208201fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e175546000906001600160a01b031680610a51573391505090565b919050565b60408051600180825281830190925260009182919060208083019080368337019050509050605f81600081518110610a9057610a9061262b565b602002602001019060c5811115610aa957610aa9612641565b908160c5811115610abc57610abc612641565b905250610ac881610ca7565b91505090565b60408051600180825281830190925260009182919060208083019080368337019050509050606181600081518110610a9057610a9061262b565b604080516001808252818301909252606091816020015b6060815260200190600190039081610b1f5790505090506040518060400160405280600881526020017f73797374656d496400000000000000000000000000000000000000000000000081525081600081518110610b7f57610b7f61262b565b602002602001018190525090565b604080516001808252818301909252606091816020015b6060815260200190600190039081610ba4579050509050604051806040016040528060068152602001651c1d5c1c195d60d21b81525081600081518110610b7f57610b7f61262b565b6000610bf7610a17565b9050306001600160a01b03821603610c1c57610c17878787878787610e6b565b610c9e565b6040517f0ba51f490000000000000000000000000000000000000000000000000000000081526001600160a01b03821690630ba51f4990610c6b908a908a908a908a908a908a906004016126d5565b600060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b505050505b50505050505050565b6000601c82511115610cda578151604051635318beb960e01b8152600401610cd191815260200190565b60405180910390fd5b60008080805b8551811015610db5576000610d1e878381518110610d0057610d0061262b565b602002602001015160c5811115610d1957610d19612641565b611156565b905080600003610d3357600190920191610d6b565b8215610d6b576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80840193506008826004601f030302878381518110610d8c57610d8c61262b565b602002602001015160c5811115610da557610da5612641565b901b949094179350600101610ce0565b506005811115610ddb57604051635318beb960e01b815260048101829052602401610cd1565b84518190036008610dee60026020612735565b610df89190612748565b83901b939093179260086001610e1060026020612735565b610e1a9190612735565b610e249190612748565b81901b93909317926008600180610e3d60026020612735565b610e479190612735565b610e519190612735565b610e5b9190612748565b9190911b92909217949350505050565b613a3160f11b867fffff0000000000000000000000000000000000000000000000000000000000001614801590610ee457507f6f74000000000000000000000000000000000000000000000000000000000000867fffff0000000000000000000000000000000000000000000000000000000000001614155b15610f4557613a3160f11b8687604051602001610f0391815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252610cd193929160040161275f565b610f4e856111b6565b610f5984600161133e565b610f6483600061133e565b60e084901c60e885901c0160ff16825114610fc45760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b60e085901c60e886901c0160ff168151146110245760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff161461109c5760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b6110a5866114e5565b156110ff5785866040516020016110be91815260200190565b60408051601f19818403018152908290527fdfaaf9cf000000000000000000000000000000000000000000000000000000008252610cd192916004016127a0565b61114b868686868660405160200161111791906127b9565b6040516020818303038152906040528660405160200161113791906127b9565b6040516020818303038152906040526115c9565b6105578660016116e9565b6000808260c581111561116b5761116b612641565b60ff169050606181101561118557601f1660010192915050565b60618360c581111561119957611199612641565b036111a75750601492915050565b50600092915050565b50919050565b806111ed576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111f8826117e0565b9050600581111561123f576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401610cd1565b600061124a8361181d565b9050600061125883836127cc565b9050601c81111561129f576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401610cd1565b60005b828110156113375760ff601b82900360080286901c1660008190036112f3576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081111561132e576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016112a2565b5050505050565b8015801561134a575081155b1561136b57604051635318beb960e01b815260006004820152602401610cd1565b6000611376836117e0565b9050600581111561139d57604051635318beb960e01b815260048101829052602401610cd1565b60006113a88461181d565b905060006113b683836127cc565b9050601c8111156113dd57604051635318beb960e01b815260048101829052602401610cd1565b60008060005b8381101561149e57600061140b6113fa8a8461182f565b60c5811115610d1957610d19612641565b11156114555784811061144a576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600190920191611496565b8481101561148f576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b6001016113e3565b508382146114c257604051635318beb960e01b815260048101839052602401610cd1565b848114610c9e57604051635318beb960e01b815260048101829052602401610cd1565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061151e5761151e61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526000906115b59061158d906125c7565b8360007e01010001000000000000000000000000000000000000000000000000000000611857565b90506115c18160f81c90565b949350505050565b604080516020810187905280820186905260608082018690528251808303909101815260809091019091526000611600848461188d565b9050600061160e85856118aa565b604080516001808252818301909252919250600091906020808301908036833701905050905089816000815181106116485761164861262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526116dd906116b4906125c7565b828686867e600302202020000000000000000000000000000000000000000000000000006118d6565b50505050505050505050565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061171f5761171f61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526117db9061178b906125c7565b826000856040516020016117a691151560f81b815260010190565b60408051601f198184030181529190527e01010001000000000000000000000000000000000000000000000000000000611c23565b505050565b600060086001806117f360026020612735565b6117fd9190612735565b6118079190612735565b6118119190612748565b8260ff911c1692915050565b6000600860016117fd60026020612735565b6000601b8290036008028360ff911c1660c581111561185057611850612641565b9392505050565b60006118846118668686611c38565b60ff858116601b0360080285901c1661187f8587611c8e565b611cd1565b95945050505050565b8151815160009181810160389190911b1760609190911b17611850565b606082826040516020016118bf9291906127df565b604051602081830303815290604052905092915050565b7f6f74000000000000000000000000000000000000000000000000000000000000867fffff000000000000000000000000000000000000000000000000000000000000160361196257857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9868686866040516119559493929190612849565b60405180910390a2610557565b600061196d87611d22565b905060005b8151811015611a5057600082828151811061198f5761198f61262b565b602002602001015190506119bb6001826affffffffffffffffffffff1916611dea90919063ffffffff16565b15611a3d576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90611a0a908c908c908c908c908c908c90600401612893565b600060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b505050505b5080611a48816128ec565b915050611972565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051611a879493929190612849565b60405180910390a26000611a9b8888611c38565b90506000602087019050611ab3826000895184611e08565b6000611abe856117e0565b1115611b42576000611ad08a8a611ec8565b878155905060208601915060008060005b611aea886117e0565b8160ff161015611b3d57611aff8d8d83611f1e565b9250611b1a8a8260ff166028026038011c64ffffffffff1690565b9150611b298360008488611e08565b611b3382866127cc565b9450600101611ae1565b505050505b60005b83518110156116dd576000848281518110611b6257611b6261262b565b60200260200101519050611b8e6002826affffffffffffffffffffff1916611dea90919063ffffffff16565b15611c10576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90611bdd908e908e908e908e908e908e90600401612893565b600060405180830381600087803b158015611bf757600080fd5b505af1158015611c0b573d6000803e3d6000fd5b505050505b5080611c1b816128ec565b915050611b45565b6113378585611c328487611c8e565b85611f9e565b60008282604051602001611c4d929190612906565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff16811015611cc957611cb560ff601b83900360080287901c16836127cc565b915080611cc1816128ec565b915050611c93565b509392505050565b600060208210611cf757602082048401935060208281611cf357611cf3612941565b0691505b508254600882021b602082900380841115611cc9576001850154600882021c82179150509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611d5c57611d5c61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090611dd390611dcb906125c7565b83600061224d565b90506115c1611de58260008451612287565b612317565b60008160ff1682611dfb8560581c90565b1660ff1614905092915050565b8215611e825760208310611e3257602083048401935060208381611e2e57611e2e612941565b0692505b8215611e825760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411611e73575050610981565b50600194909401939182900391015b5b60208210611ea45780518455600190930192601f1990910190602001611e83565b8115610981576000600019600884021c198554835182169119161785555050505050565b60008282604051602001611edd929190612906565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b60008383604051602001611f33929190612906565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff000000000000000000000000000000000000000000000000000000000000160361202857837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161201b93929190612957565b60405180910390a2610981565b60006120348585611c38565b9050600061204186611d22565b905060005b81518110156121205760008282815181106120635761206361262b565b6020026020010151905061208f6004826affffffffffffffffffffff1916611dea90919063ffffffff16565b1561210d576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d906120da908b908b908b908b90600401612994565b600060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b505050505b5080612118816128ec565b915050612046565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be86868660405161215593929190612957565b60405180910390a2612170828565ffffffffffff1685612328565b60005b8151811015610c9e5760008282815181106121905761219061262b565b602002602001015190506121bc6008826affffffffffffffffffffff1916611dea90919063ffffffff16565b1561223a576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190612207908b908b908b908b90600401612994565b600060405180830381600087803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b505050505b5080612245816128ec565b915050612173565b60606115c161225d858585611f1e565b60006122828561226d898961233e565b9060ff166028026038011c64ffffffffff1690565b612351565b600081831115801561229a575083518211155b6122d6578383836040517f23230fa3000000000000000000000000000000000000000000000000000000008152600401610cd1939291906129cd565b602084016122e484826127cc565b905060006122f28585612735565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006118508360156000612374565b6117db838383516123398560200190565b611e08565b600061185061234d8484611ec8565b5490565b60405160208101601f19603f8484010116604052828252611cc9858585846123ef565b606060006123828560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816123a8576123a8612941565b04905060405193506020840160208202810160405281855260005b828110156123e3578451871c8252938701936020909101906001016123c3565b50505050509392505050565b821561247857602083106124195760208304840193506020838161241557612415612941565b0692505b821561247857602083900360008184101561243d5750600019600884021c19612448565b50600019600882021c195b8554600886021b811984511682821617845250818411612469575050610981565b50600194909401939182900391015b5b6020821061249a5783548152600190930192601f1990910190602001612479565b8115610981576000600019600884021c198251865482169119161782525050505050565b6000602082840312156124d057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461185057600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561252857600080fd5b813567ffffffffffffffff8082111561254057600080fd5b818401915084601f83011261255457600080fd5b81358181111561256657612566612500565b604051601f8201601f19908116603f0116810190838211818310171561258e5761258e612500565b816040528281528760208487010111156125a757600080fd5b826020860160208301376000928101602001929092525095945050505050565b805160208083015191908110156111b05760001960209190910360031b1b16919050565b60005b838110156126065781810151838201526020016125ee565b50506000910152565b600082516126218184602087016125eb565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000815180845261266f8160208601602086016125eb565b601f01601f19169290920160200192915050565b6000815180845260208085019450848260051b860182860160005b858110156126c85783830389526126b6838351612657565b9885019892509084019060010161269e565b5090979650505050505050565b86815285602082015284604082015283606082015260c06080820152600061270060c0830185612683565b82810360a08401526127128185612683565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102035761020361271f565b80820281158282048414176102035761020361271f565b7fffff000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006118846060830184612657565b8281526040602082015260006115c16040830184612657565b6020815260006118506020830184612683565b808201808211156102035761020361271f565b600083516127f18184602088016125eb565b8351908301906128058183602088016125eb565b01949350505050565b600081518084526020808501945080840160005b8381101561283e57815187529582019590820190600101612822565b509495945050505050565b60808152600061285c608083018761280e565b828103602084015261286e8187612657565b905084604084015282810360608401526128888185612657565b979650505050505050565b86815260c0602082015260006128ac60c083018861280e565b82810360408401526128be8188612657565b905085606084015282810360808401526128d88186612657565b9150508260a0830152979650505050505050565b600060001982036128ff576128ff61271f565b5060010190565b82815260006020808301845182860160005b8281101561293457815184529284019290840190600101612918565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b60608152600061296a606083018661280e565b65ffffffffffff85166020840152828103604084015261298a8185612657565b9695505050505050565b8481526080602082015260006129ad608083018661280e565b65ffffffffffff8516604084015282810360608401526128888185612657565b6060815260006129e06060830186612657565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b5061085d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80631a86b550116100505780631a86b550146100c157806345ec9354146100d4578063e1af802c146100e757600080fd5b806301ffc9a71461006c578063119df25f14610094575b600080fd5b61007f61007a3660046105c6565b6100ef565b60405190151581526020015b60405180910390f35b61009c6101d4565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b61007f6100cf366004610625565b6101e3565b604051601f19360135815260200161008b565b61009c6102c2565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faf58547700000000000000000000000000000000000000000000000000000000148061018257507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b806101ce57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101de6102cc565b905090565b6000806101ee6101d4565b604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f5075707065745265676973747279000000000000000000000000000000000000603082015291925073ffffffffffffffffffffffffffffffffffffffff8316916102a2910160405160208183030381529060405261029c9061070b565b866102fe565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60006101de61037b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102fb5750335b90565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061033757610337610732565b6020908102919091010152600061036f8583837e140100140000000000000000000000000000000000000000000000000000006103c7565b60601c95945050505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff16806103c2573391505090565b919050565b6000806103d261037b565b90503073ffffffffffffffffffffffffffffffffffffffff821603610405576103fd868686866104a6565b91505061049e565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d599061045d908990899089908990600401610748565b602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fd91906107a3565b949350505050565b60006104d36104b586866104dc565b60ff858116601b0360080285901c166104ce8587610532565b610575565b95945050505050565b600082826040516020016104f19291906107bc565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561056d5761055960ff601b83900360080287901c168361080d565b91508061056581610820565b915050610537565b509392505050565b60006020821061059b576020820484019350602082816105975761059761083a565b0691505b508254600882021b60208290038084111561056d576001850154600882021c82179150509392505050565b6000602082840312156105d857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461060857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561063a57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461065e57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561068257600080fd5b818601915086601f83011261069657600080fd5b8135818111156106a8576106a861060f565b604051601f8201601f19908116603f011681019083821181831017156106d0576106d061060f565b816040528281528960208487010111156106e957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8051602080830151919081101561072c576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156107895784518352938301939183019160010161076d565b505060ff9690961660408501525050506060015292915050565b6000602082840312156107b557600080fd5b5051919050565b82815260006020808301845182860160005b828110156107ea578151845292840192908401906001016107ce565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101ce576101ce6107f7565b60006000198203610833576108336107f7565b5060010190565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000a608060405234801561001057600080fd5b506126e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806345ec93541161005057806345ec9354146100c1578063b9eb8bfb146100d4578063e1af802c146100e757600080fd5b806301ffc9a71461006c578063119df25f14610094575b600080fd5b61007f61007a366004611297565b6100ef565b60405190151581526020015b60405180910390f35b61009c610188565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b604051601f19360135815260200161008b565b61009c6100e23660046112d9565b610197565b61009c6102a0565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000148061018257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101926102aa565b905090565b60006101aa826101a5610188565b6102dc565b6101b26102a0565b826040516101bf9061128a565b73ffffffffffffffffffffffffffffffffffffffff90921682526020820152604001604051809103906000f0801580156101fd573d6000803e3d6000fd5b50604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f5075707065745265676973747279000000000000000000000000000000000000603082015291925061029b9101604051602081830303815290604052610294906112f2565b83836103a4565b919050565b6000610192610464565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102d95750335b90565b73ffffffffffffffffffffffffffffffffffffffff811661033e7f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff000000000000000000000000000000008516176104ab565b73ffffffffffffffffffffffffffffffffffffffff16146103a057610362826105b9565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610397929190611369565b60405180910390fd5b5050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106103da576103da6113a1565b60200260200101818152505061045e8482600085604051602001610429919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b60408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006106f6565b50505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff168061029b573391505090565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106104e4576104e46113a1565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906105ae90610586906112f2565b8360007e140100140000000000000000000000000000000000000000000000000000006107c6565b60601c949350505050565b606081601081901b60006105cc836108a5565b9050827fffffffffffffffffffffffffffff000000000000000000000000000000000000831615610627576106227fffffffffffffffffffffffffffff00000000000000000000000000000000000084166108bc565b61065e565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156106945761068f836108bc565b6106cb565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016106dd939291906113d0565b6040516020818303038152906040529350505050919050565b6000610700610464565b90503073ffffffffffffffffffffffffffffffffffffffff8216036107315761072c868686868661096a565b6107be565b6040517f390baae000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063390baae09061078b9089908990899089908990600401611499565b600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b505050505b505050505050565b6000806107d1610464565b90503073ffffffffffffffffffffffffffffffffffffffff821603610804576107fc86868686610986565b91505061089d565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d599061085c9089908990899089906004016114e0565b602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc919061150f565b949350505050565b60006108b360706010611557565b9190911b919050565b606060005b601081101561092b577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff00000000000000000000000000000000000000000000000000000000000000161561092b57806109238161156a565b9150506108c1565b604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166020820152815160309091019091528181528061089d565b61097f858561097984876109bc565b856109ff565b5050505050565b60006109b36109958686610cb7565b60ff858116601b0360080285901c166109ae85876109bc565b610d0d565b95945050505050565b600080805b8360ff168110156109f7576109e360ff601b83900360080287901c1683611557565b9150806109ef8161156a565b9150506109c1565b509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610a8957837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610a7c93929190611584565b60405180910390a261045e565b6000610a958585610cb7565b90506000610aa286610d5e565b905060005b8151811015610b81576000828281518110610ac457610ac46113a1565b60200260200101519050610af06004826affffffffffffffffffffff1916610e5990919063ffffffff16565b15610b6e576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610b3b908b908b908b908b906004016115c1565b600060405180830381600087803b158015610b5557600080fd5b505af1158015610b69573d6000803e3d6000fd5b505050505b5080610b798161156a565b915050610aa7565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610bb693929190611584565b60405180910390a2610bd1828565ffffffffffff1685610e77565b60005b8151811015610cae576000828281518110610bf157610bf16113a1565b60200260200101519050610c1d6008826affffffffffffffffffffff1916610e5990919063ffffffff16565b15610c9b576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610c68908b908b908b908b906004016115c1565b600060405180830381600087803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b505050505b5080610ca68161156a565b915050610bd4565b50505050505050565b60008282604051602001610ccc929190611605565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600060208210610d3357602082048401935060208281610d2f57610d2f611640565b0691505b508254600882021b6020829003808411156109f7576001850154600882021c82179150509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610d9857610d986113a1565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090610e4290610e3a906112f2565b836000610e92565b905061089d610e548260008451610ecc565b610f5c565b60008160ff1682610e6a8560581c90565b1660ff1614905092915050565b610e8d83838351610e888560200190565b610f74565b505050565b606061089d610ea2858585611034565b6000610ec785610eb289896110b4565b9060ff166028026038011c64ffffffffff1690565b6110c7565b6000818311158015610edf575083518211155b610f1b578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016103979392919061166f565b60208401610f298482611557565b90506000610f378585611694565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000610f6d83601560006110ea565b9392505050565b8215610fee5760208310610f9e57602083048401935060208381610f9a57610f9a611640565b0692505b8215610fee5760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411610fdf57505061045e565b50600194909401939182900391015b5b602082106110105780518455600190930192601f1990910190602001610fef565b811561045e576000600019600884021c198554835182169119161785555050505050565b60008383604051602001611049929190611605565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b6000610f6d6110c38484611165565b5490565b60405160208101601f19603f84840101166040528282526109f7858585846111bb565b606060006110f88560801c90565b90506fffffffffffffffffffffffffffffffff8516600085828161111e5761111e611640565b04905060405193506020840160208202810160405281855260005b82811015611159578451871c825293870193602090910190600101611139565b50505050509392505050565b6000828260405160200161117a929190611605565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b821561124457602083106111e5576020830484019350602083816111e1576111e1611640565b0692505b82156112445760208390036000818410156112095750600019600884021c19611214565b50600019600882021c195b8554600886021b81198451168282161784525081841161123557505061045e565b50600194909401939182900391015b5b602082106112665783548152600190930192601f1990910190602001611245565b811561045e576000600019600884021c198251865482169119161782525050505050565b611035806116a883390190565b6000602082840312156112a957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f6d57600080fd5b6000602082840312156112eb57600080fd5b5035919050565b80516020808301519190811015611313576000198160200360031b1b821691505b50919050565b60005b8381101561133457818101518382015260200161131c565b50506000910152565b60008151808452611355816020860160208601611319565b601f01601f19169290920160200192915050565b60408152600061137c604083018561133d565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a000000000000000000000000000000000000000000000000000000000000008060028401528451611431816003860160208901611319565b808401905081600382015284519150611451826004830160208801611319565b0160040195945050505050565b600081518084526020808501945080840160005b8381101561148e57815187529582019590820190600101611472565b509495945050505050565b85815260a0602082015260006114b260a083018761145e565b60ff8616604084015282810360608401526114cd818661133d565b9150508260808301529695505050505050565b8481526080602082015260006114f9608083018661145e565b60ff949094166040830152506060015292915050565b60006020828403121561152157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561018257610182611528565b6000600019820361157d5761157d611528565b5060010190565b606081526000611597606083018661145e565b65ffffffffffff8516602084015282810360408401526115b7818561133d565b9695505050505050565b8481526080602082015260006115da608083018661145e565b65ffffffffffff8516604084015282810360608401526115fa818561133d565b979650505050505050565b82815260006020808301845182860160005b8281101561163357815184529284019290840190600101611617565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b606081526000611682606083018661133d565b60208301949094525060400152919050565b818103818111156101825761018261152856fe60c060405234801561001057600080fd5b5060405161103538038061103583398101604081905261002f9161007c565b6001600160a01b038216608081905260a08290527f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e17580546001600160a01b031916909117905550506100b6565b6000806040838503121561008f57600080fd5b82516001600160a01b03811681146100a657600080fd5b6020939093015192949293505050565b60805160a051610f326101036000396000818160e1015281816101b401528181610239015281816102b70152818161032e01526103a101526000818160b201526101630152610f326000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063c9a34acd11610050578063c9a34acd146101f9578063d72a26651461020c578063e2ed58bd1461021f57610072565b806330b67baa1461015e57806339f898bc146101af57806366c93bdb146101e4575b6040517f894ecc5800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063894ecc589061010d9033907f00000000000000000000000000000000000000000000000000000000000000009086903690600401610a5c565b6000604051808303816000875af115801561012c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101549190810190610b88565b9050805160208201f35b6101857f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101d67f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101a6565b6101f76101f2366004610c16565b610232565b005b6101f7610207366004610c7a565b6102b0565b6101f761021a366004610cd4565b610327565b6101f761022d366004610d1b565b61039a565b600061025d7f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff82161461029d576040516398d49b0360e01b81523360048201526024015b60405180910390fd5b82848688855160208701a4505050505050565b60006102db7f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff821614610316576040516398d49b0360e01b8152336004820152602401610294565b828486845160208601a35050505050565b60006103527f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff82161461038d576040516398d49b0360e01b8152336004820152602401610294565b82825160208401a1505050565b60006103c57f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff821614610400576040516398d49b0360e01b8152336004820152602401610294565b8284835160208501a250505050565b6040805160018082528183019092526000918291829160208083019080368337019050509050838160008151811061044957610449610d6b565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f53797374656d73000000000000000000000000000000000000000000000000006030820152815180820390930183528101905260009081908190610515906104ef90610d81565b857e1502001401000000000000000000000000000000000000000000000000000061053a565b5050602081015160349091015160609190911c9860f89190911c975095505050505050565b606060006060600061054a610624565b90503073ffffffffffffffffffffffffffffffffffffffff82160361058057610574878787610670565b9350935093505061061b565b6040517f419b58fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063419b58fd906105d6908a908a908a90600401610da8565b600060405180830381865afa1580156105f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105749190810190610dff565b93509350939050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff168061066b573391505090565b919050565b606060006060600061068185610778565b905061068e87878361079b565b9350600061069b866107df565b9050801561076d576106ad888861081c565b935066ffffffffffffff841667ffffffffffffffff8111156106d1576106d1610aaf565b6040519080825280601f01601f1916602001820160405280156106fb576020820181803683370190505b5092506020830160005b828160ff16101561076a57600061071d8b8b84610838565b9050600061073a888460ff166028026038011c64ffffffffff1690565b905061074982600083876108b8565b6107538185610e78565b93505050808061076290610e8b565b915050610705565b50505b505093509350939050565b6000600861078860026020610eaa565b6107929190610ebd565b9190911c919050565b6060816000036107ba57506040805160208101909152600081526107d8565b60006107c68585610985565b90506107d4816000856109db565b9150505b9392505050565b600060086001806107f260026020610eaa565b6107fc9190610eaa565b6108069190610eaa565b6108109190610ebd565b8260ff911c1692915050565b600061082f61082b8484610a06565b5490565b90505b92915050565b6000838360405160200161084d929190610ed4565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b821561094157602083106108e2576020830484019350602083816108de576108de610f0f565b0692505b82156109415760208390036000818410156109065750600019600884021c19610911565b50600019600882021c195b8554600886021b81198451168282161784525081841161093257505061097f565b50600194909401939182900391015b5b602082106109635783548152600190930192601f1990910190602001610942565b811561097f5780518454600019600885021c9182169119161781525b50505050565b6000828260405160200161099a929190610ed4565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b60405160208101601f19603f84840101166040528282526109fe858585846108b8565b509392505050565b60008282604051602001610a1b929190610ed4565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610aee57610aee610aaf565b604052919050565b600067ffffffffffffffff821115610b1057610b10610aaf565b50601f01601f191660200190565b600082601f830112610b2f57600080fd5b8151610b42610b3d82610af6565b610ac5565b81815260208581848701011115610b5857600080fd5b60005b83811015610b76578581018201518382018301528101610b5b565b50600092820101919091529392505050565b600060208284031215610b9a57600080fd5b815167ffffffffffffffff811115610bb157600080fd5b610bbd84828501610b1e565b949350505050565b600082601f830112610bd657600080fd5b8135610be4610b3d82610af6565b818152846020838601011115610bf957600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610c2e57600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115610c6157600080fd5b610c6d88828901610bc5565b9150509295509295909350565b60008060008060808587031215610c9057600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115610cbc57600080fd5b610cc887828801610bc5565b91505092959194509250565b60008060408385031215610ce757600080fd5b82359150602083013567ffffffffffffffff811115610d0557600080fd5b610d1185828601610bc5565b9150509250929050565b600080600060608486031215610d3057600080fd5b8335925060208401359150604084013567ffffffffffffffff811115610d5557600080fd5b610d6186828701610bc5565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b80516020808301519190811015610da2576000198160200360031b1b821691505b50919050565b6000606082018583526020606081850152818651808452608086019150828801935060005b81811015610de957845183529383019391830191600101610dcd565b5050809350505050826040830152949350505050565b600080600060608486031215610e1457600080fd5b835167ffffffffffffffff80821115610e2c57600080fd5b610e3887838801610b1e565b9450602086015193506040860151915080821115610e5557600080fd5b50610d6186828701610b1e565b634e487b7160e01b600052601160045260246000fd5b8082018082111561083257610832610e62565b600060ff821660ff8103610ea157610ea1610e62565b60010192915050565b8181038181111561083257610832610e62565b808202811582820484141761083257610832610e62565b82815260006020808301845182860160005b82811015610f0257815184529284019290840190600101610ee6565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000aa164736f6c6343000815000a608060405234801561001057600080fd5b50610a77806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806345ec93541161005057806345ec9354146100ec578063d737d0c7146100ff578063e1af802c1461010757600080fd5b806301ffc9a714610077578063119df25f1461009f578063319585fb146100cc575b600080fd5b61008a6100853660046107a3565b61010f565b60405190151581526020015b60405180910390f35b6100a76101a8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100df6100da366004610802565b6101b7565b60405161009691906108f9565b604051601f193601358152602001610096565b6100a7610272565b6100a761027c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101b2610286565b905090565b60606101c16102b8565b73ffffffffffffffffffffffffffffffffffffffff1663d72a26657fe762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d8460405160200161020e91906108f9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161023a92919061090c565b600060405180830381600087803b15801561025457600080fd5b505af1158015610268573d6000803e3d6000fd5b5093949350505050565b60006101b26101a8565b60006101b26103bf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102b55750335b90565b6000806102c43061040b565b604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f50757070657452656769737472790000000000000000000000000000000000006030820152919250600091610363910160405160208183030381529060405261035d90610925565b8361052f565b905073ffffffffffffffffffffffffffffffffffffffff81166101a2576040517f9434f7e10000000000000000000000000000000000000000000000000000000081523060048201526024810183905260440160405180910390fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610406573391505090565b919050565b604080516001808252818301909252600091829190602080830190803683370190505090508273ffffffffffffffffffffffffffffffffffffffff1660001b8160008151811061045d5761045d61094c565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f53797374656d526567697374727900000000000000000000000000000000000060308201528151808203909301835281019052600090610527906104ff90610925565b8360007e200100200000000000000000000000000000000000000000000000000000006105ac565b949350505050565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106105685761056861094c565b602090810291909101015260006105a08583837e140100140000000000000000000000000000000000000000000000000000006105ac565b60601c95945050505050565b6000806105b76103bf565b90503073ffffffffffffffffffffffffffffffffffffffff8216036105ea576105e286868686610683565b915050610527565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d5990610642908990899089908990600401610962565b602060405180830381865afa15801561065f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e291906109bd565b60006106b061069286866106b9565b60ff858116601b0360080285901c166106ab858761070f565b610752565b95945050505050565b600082826040516020016106ce9291906109d6565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561074a5761073660ff601b83900360080287901c1683610a27565b91508061074281610a3a565b915050610714565b509392505050565b6000602082106107785760208204840193506020828161077457610774610a54565b0691505b508254600882021b60208290038084111561074a576001850154600882021c82179150509392505050565b6000602082840312156107b557600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146107e557600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561081457600080fd5b813567ffffffffffffffff8082111561082c57600080fd5b818401915084601f83011261084057600080fd5b813581811115610852576108526107ec565b604051601f8201601f19908116603f0116810190838211818310171561087a5761087a6107ec565b8160405282815287602084870101111561089357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000815180845260005b818110156108d9576020818501810151868301820152016108bd565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006107e560208301846108b3565b82815260406020820152600061052760408301846108b3565b80516020808301519190811015610946576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156109a357845183529383019391830191600101610987565b505060ff9690961660408501525050506060015292915050565b6000602082840312156109cf57600080fd5b5051919050565b82815260006020808301845182860160005b82811015610a04578151845292840192908401906001016109e8565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101a2576101a2610a11565b60006000198203610a4d57610a4d610a11565b5060010190565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000a608060405234801561001057600080fd5b50611a59806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806345ec93541161005b57806345ec9354146100ec5780638d53b208146100ff578063e1af802c14610112578063ef5d6bbb1461011a57600080fd5b806301ffc9a714610082578063119df25f146100aa57806340554c3a146100d7575b600080fd5b61009561009036600461165b565b61012d565b60405190151581526020015b60405180910390f35b6100b26101c6565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100ea6100e536600461169d565b6101d5565b005b604051601f1936013581526020016100a1565b6100ea61010d36600461169d565b6101f6565b6100b261020c565b6100ea61012836600461169d565b610216565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101c057507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101d061023d565b905090565b6101e6826101e16101c6565b61026f565b6101f282826001610333565b5050565b610202826101e16101c6565b6101f28282610463565b60006101d0610568565b610222826101e16101c6565b61022c82826105b4565b6101e6826102386101c6565b610463565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c8061026c5750335b90565b73ffffffffffffffffffffffffffffffffffffffff81166102d17f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff000000000000000000000000000000008516176106c2565b73ffffffffffffffffffffffffffffffffffffffff16146101f2576102f58261079d565b816040517fd787b73700000000000000000000000000000000000000000000000000000000815260040161032a929190611736565b60405180910390fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061036857610368611784565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106103a1576103a1611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f757263654163636573730000000000000000000000000000000000006030820152815180820390930183528101905261045d9061040d9061179a565b8260008560405160200161042891151560f81b815260010190565b60408051601f198184030181529190527e010100010000000000000000000000000000000000000000000000000000006108da565b50505050565b604080516002808252606082018352600092602083019080368337019050509050828160008151811061049857610498611784565b6020026020010181815250508173ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106104d1576104d1611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f75726365416363657373000000000000000000000000000000000000603082015281518082039093018352810190526105639061053d9061179a565b827e010100010000000000000000000000000000000000000000000000000000006108f6565b505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff16806105af573391505090565b919050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106105ea576105ea611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e657200000000000000000000000000000000000060308201528151808203909301835281019052610563906106569061179a565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006108da565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106106fb576106fb611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906107929061076a9061179a565b8360007e14010014000000000000000000000000000000000000000000000000000000610c11565b60601c949350505050565b606081601081901b60006107b083610c47565b9050827fffffffffffffffffffffffffffff00000000000000000000000000000000000083161561080b576108067fffffffffffffffffffffffffffff0000000000000000000000000000000000008416610c5e565b610842565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156108785761087383610c5e565b6108af565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016108c1939291906117c1565b6040516020818303038152906040529350505050919050565b6108ef85856108e98487610d10565b85610d53565b5050505050565b7f6f74000000000000000000000000000000000000000000000000000000000000837fffff000000000000000000000000000000000000000000000000000000000000160361097c57827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d078360405161096f919061188a565b60405180910390a2505050565b60006109878461100b565b905060005b8151811015610a645760008282815181106109a9576109a9611784565b602002602001015190506109d56040826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610a51576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf4590610a1e9089908990899060040161189d565b600060405180830381600087803b158015610a3857600080fd5b505af1158015610a4c573d6000803e3d6000fd5b505050505b5080610a5c816118dc565b91505061098c565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0784604051610a95919061188a565b60405180910390a26000610aa98585611109565b9050610b02816000610aba8661115f565b67ffffffffffffffff811115610ad257610ad261176e565b6040519080825280601f01601f191660200182016040528015610afc576020820181803683370190505b50611182565b6000610b0d84611198565b1115610b2e576000610b1f86866111d5565b9050610b2c81602061122b565b505b60005b8251811015610c09576000838281518110610b4e57610b4e611784565b60200260200101519050610b7a6080826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610bf6576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b90610bc3908a908a908a9060040161189d565b600060405180830381600087803b158015610bdd57600080fd5b505af1158015610bf1573d6000803e3d6000fd5b505050505b5080610c01816118dc565b915050610b31565b505050505050565b6000610c3e610c208686611109565b60ff858116601b0360080285901c16610c398587610d10565b611268565b95945050505050565b6000610c55607060106118f6565b9190911b919050565b606060005b6010811015610ccd577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff000000000000000000000000000000000000000000000000000000000000001615610ccd5780610cc5816118dc565b915050610c63565b604080517fffffffffffffffffffffffffffffffff000000000000000000000000000000008516602082015281516030909101909152818152805b949350505050565b600080805b8360ff16811015610d4b57610d3760ff601b83900360080287901c16836118f6565b915080610d43816118dc565b915050610d15565b509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610ddd57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610dd093929190611909565b60405180910390a261045d565b6000610de98585611109565b90506000610df68661100b565b905060005b8151811015610ed5576000828281518110610e1857610e18611784565b60200260200101519050610e446004826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610ec2576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610e8f908b908b908b908b90600401611946565b600060405180830381600087803b158015610ea957600080fd5b505af1158015610ebd573d6000803e3d6000fd5b505050505b5080610ecd816118dc565b915050610dfb565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610f0a93929190611909565b60405180910390a2610f25828565ffffffffffff1685611182565b60005b8151811015611002576000828281518110610f4557610f45611784565b60200260200101519050610f716008826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610fef576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610fbc908b908b908b908b90600401611946565b600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050505b5080610ffa816118dc565b915050610f28565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061104557611045611784565b60209081029190910181019190915260408051613a3160f11b818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015281518082039093018352810190526000906110d4906110cc9061179a565b8360006112b9565b9050610d086110e682600084516112f3565b611383565b60008160ff16826110fc8560581c90565b1660ff1614905092915050565b6000828260405160200161111e92919061198a565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b6000600861116f600260206119c5565b61117991906119d8565b9190911c919050565b610563838383516111938560200190565b61139b565b600060086001806111ab600260206119c5565b6111b591906119c5565b6111bf91906119c5565b6111c991906119d8565b8260ff911c1692915050565b600082826040516020016111ea92919061198a565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000602061123a83601f6118f6565b6112449190611a05565b61124e90846118f6565b90505b808310156105635760008355600183019250611251565b60006020821061128e5760208204840193506020828161128a5761128a6119ef565b0691505b508254600882021b602082900380841115610d4b576001850154600882021c82179150509392505050565b6060610d086112c985858561145b565b60006112ee856112d989896114db565b9060ff166028026038011c64ffffffffff1690565b6114ee565b6000818311158015611306575083518211155b611342578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161032a93929190611a27565b6020840161135084826118f6565b9050600061135e85856119c5565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006113948360156000611511565b9392505050565b821561141557602083106113c5576020830484019350602083816113c1576113c16119ef565b0692505b82156114155760208390036000600019600885021c1990506008850281811c91508351811c905081198754168282161787555081841161140657505061045d565b50600194909401939182900391015b5b602082106114375780518455600190930192601f1990910190602001611416565b811561045d576000600019600884021c198554835182169119161785555050505050565b6000838360405160200161147092919061198a565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006113946114ea84846111d5565b5490565b60405160208101601f19603f8484010116604052828252610d4b8585858461158c565b6060600061151f8560801c90565b90506fffffffffffffffffffffffffffffffff85166000858281611545576115456119ef565b04905060405193506020840160208202810160405281855260005b82811015611580578451871c825293870193602090910190600101611560565b50505050509392505050565b821561161557602083106115b6576020830484019350602083816115b2576115b26119ef565b0692505b82156116155760208390036000818410156115da5750600019600884021c196115e5565b50600019600882021c195b8554600886021b81198451168282161784525081841161160657505061045d565b50600194909401939182900391015b5b602082106116375783548152600190930192601f1990910190602001611616565b811561045d576000600019600884021c198251865482169119161782525050505050565b60006020828403121561166d57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461139457600080fd5b600080604083850312156116b057600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff811681146116db57600080fd5b809150509250929050565b60005b838110156117015781810151838201526020016116e9565b50506000910152565b600081518084526117228160208601602086016116e6565b601f01601f19169290920160200192915050565b604081526000611749604083018561170a565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b805160208083015191908110156117bb576000198160200360031b1b821691505b50919050565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516118228160038601602089016116e6565b8084019050816003820152845191506118428260048301602088016116e6565b0160040195945050505050565b600081518084526020808501945080840160005b8381101561187f57815187529582019590820190600101611863565b509495945050505050565b602081526000611394602083018461184f565b8381526060602082015260006118b6606083018561184f565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b600060001982036118ef576118ef6118c6565b5060010190565b808201808211156101c0576101c06118c6565b60608152600061191c606083018661184f565b65ffffffffffff85166020840152828103604084015261193c818561170a565b9695505050505050565b84815260806020820152600061195f608083018661184f565b65ffffffffffff85166040840152828103606084015261197f818561170a565b979650505050505050565b82815260006020808301845182860160005b828110156119b85781518452928401929084019060010161199c565b5091979650505050505050565b818103818111156101c0576101c06118c6565b80820281158282048414176101c0576101c06118c6565b634e487b7160e01b600052601260045260246000fd5b600082611a2257634e487b7160e01b600052601260045260246000fd5b500490565b606081526000611a3a606083018661170a565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b506118ac806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806345ec93541161005057806345ec9354146100e1578063c9c85a60146100f4578063e1af802c1461010757600080fd5b806301ffc9a714610077578063119df25f1461009f57806345afd199146100cc575b600080fd5b61008a610085366004611460565b61010f565b60405190151581526020015b60405180910390f35b6100a76101a8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100df6100da3660046114a2565b6101b7565b005b604051601f193601358152602001610096565b6100df6101023660046114f3565b6102ac565b6100a76103e7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101b26103f1565b905090565b6101c8836101c36101a8565b610423565b60006101d384610473565b90508082111561021e576040517f0e0e2d4d00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6102318461022c848461154e565b610563565b6000808473ffffffffffffffffffffffffffffffffffffffff168460405160006040518083038185875af1925050503d806000811461028c576040519150601f19603f3d011682016040523d82523d6000602084013e610291565b606091505b5091509150816102a4576102a48161066d565b505050505050565b7f6e73000000000000000000000000000000000000000000000000000000000000827fffff0000000000000000000000000000000000000000000000000000000000001614610355577f6e730000000000000000000000000000000000000000000000000000000000008261032084610675565b6040517f5c30fb6f000000000000000000000000000000000000000000000000000000008152600401610215939291906115b1565b61035e826107b2565b61036a836101c36101a8565b600061037584610473565b9050808211156103bb576040517f0e0e2d4d0000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401610215565b6103c98461022c848461154e565b6103e183836103d786610473565b61022c91906115f2565b50505050565b60006101b2610800565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806104205750335b90565b61042d828261084c565b61046f5761043a82610675565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610215929190611605565b5050565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106104ac576104ac61163d565b60209081029190910181019190915260408051613a3160f11b818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f42616c616e6365730000000000000000000000000000000000000000000000006030820152815180820390930183528101905260009061055b906105339061166c565b8360007e200100200000000000000000000000000000000000000000000000000000006108b1565b949350505050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106105995761059961163d565b60209081029190910181019190915260408051613a3160f11b818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015281518082039093018352810190526106689061061d9061166c565b8260008560405160200161063391815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006108e7565b505050565b805160208201fd5b606081601081901b600061068883610903565b9050827fffffffffffffffffffffffffffff0000000000000000000000000000000000008316156106e3576106de7fffffffffffffffffffffffffffff000000000000000000000000000000000000841661091a565b61071a565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156107505761074b8361091a565b610787565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b60405160200161079993929190611693565b6040516020818303038152906040529350505050919050565b6107bb816109c8565b6107fd57806107c982610675565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610215929190611721565b50565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610847573391505090565b919050565b600061089a7f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff0000000000000000000000000000000085161783610ac2565b806108aa57506108aa8383610ac2565b9392505050565b60006108de6108c08686610bb9565b60ff858116601b0360080285901c166108d98587610c0f565b610c52565b95945050505050565b6108fc85856108f68487610c0f565b85610ca3565b5050505050565b6000610911607060106115f2565b9190911b919050565b606060005b6010811015610989577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff00000000000000000000000000000000000000000000000000000000000000161561098957806109818161173a565b91505061091f565b604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166020820152815160309091019091528181528061055b565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110610a0157610a0161163d565b60209081029190910181019190915260408051613a3160f11b928101929092527f73746f726500000000000000000000000000000000000000000000000000000060228301527f5265736f757263654964730000000000000000000000000000000000000000006030830152600091610ab691015b604051602081830303815290604052610a8e9061166c565b8360007e010100010000000000000000000000000000000000000000000000000000006108b1565b905061055b8160f81c90565b604080516002808252606082018352600092839291906020830190803683370190505090508381600081518110610afb57610afb61163d565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b81600181518110610b3457610b3461163d565b60209081029190910181019190915260408051613a3160f11b928101929092527f776f726c6400000000000000000000000000000000000000000000000000000060228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152600091610bad9101610a76565b90506108de8160f81c90565b60008282604051602001610bce929190611754565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff16811015610c4a57610c3660ff601b83900360080287901c16836115f2565b915080610c428161173a565b915050610c14565b509392505050565b600060208210610c7857602082048401935060208281610c7457610c7461178f565b0691505b508254600882021b602082900380841115610c4a576001850154600882021c82179150509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610d2d57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610d20939291906117f9565b60405180910390a26103e1565b6000610d398585610bb9565b90506000610d4686610f5b565b905060005b8151811015610e25576000828281518110610d6857610d6861163d565b60200260200101519050610d946004826affffffffffffffffffffff191661103b90919063ffffffff16565b15610e12576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610ddf908b908b908b908b90600401611836565b600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050505b5080610e1d8161173a565b915050610d4b565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610e5a939291906117f9565b60405180910390a2610e75828565ffffffffffff1685611059565b60005b8151811015610f52576000828281518110610e9557610e9561163d565b60200260200101519050610ec16008826affffffffffffffffffffff191661103b90919063ffffffff16565b15610f3f576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610f0c908b908b908b908b90600401611836565b600060405180830381600087803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b505050505b5080610f4a8161173a565b915050610e78565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610f9557610f9561163d565b60209081029190910181019190915260408051613a3160f11b818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015281518082039093018352810190526000906110249061101c9061166c565b83600061106f565b905061055b61103682600084516110a9565b611139565b60008160ff168261104c8560581c90565b1660ff1614905092915050565b6106688383835161106a8560200190565b61114a565b606061055b61107f85858561120a565b60006110a48561108f898961128a565b9060ff166028026038011c64ffffffffff1690565b61129d565b60008183111580156110bc575083518211155b6110f8578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016102159392919061187a565b6020840161110684826115f2565b90506000611114858561154e565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006108aa83601560006112c0565b82156111c45760208310611174576020830484019350602083816111705761117061178f565b0692505b82156111c45760208390036000600019600885021c1990506008850281811c91508351811c90508119875416828216178755508184116111b55750506103e1565b50600194909401939182900391015b5b602082106111e65780518455600190930192601f19909101906020016111c5565b81156103e1576000600019600884021c198554835182169119161785555050505050565b6000838360405160200161121f929190611754565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006108aa611299848461133b565b5490565b60405160208101601f19603f8484010116604052828252610c4a85858584611391565b606060006112ce8560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816112f4576112f461178f565b04905060405193506020840160208202810160405281855260005b8281101561132f578451871c82529387019360209091019060010161130f565b50505050509392505050565b60008282604051602001611350929190611754565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b821561141a57602083106113bb576020830484019350602083816113b7576113b761178f565b0692505b821561141a5760208390036000818410156113df5750600019600884021c196113ea565b50600019600882021c195b8554600886021b81198451168282161784525081841161140b5750506103e1565b50600194909401939182900391015b5b6020821061143c5783548152600190930192601f199091019060200161141b565b81156103e1576000600019600884021c198251865482169119161782525050505050565b60006020828403121561147257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108aa57600080fd5b6000806000606084860312156114b757600080fd5b83359250602084013573ffffffffffffffffffffffffffffffffffffffff811681146114e257600080fd5b929592945050506040919091013590565b60008060006060848603121561150857600080fd5b505081359360208301359350604090920135919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156101a2576101a261151f565b60005b8381101561157c578181015183820152602001611564565b50506000910152565b6000815180845261159d816020860160208601611561565b601f01601f19169290920160200192915050565b7fffff000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006108de6060830184611585565b808201808211156101a2576101a261151f565b6040815260006116186040830185611585565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051602080830151919081101561168d576000198160200360031b1b821691505b50919050565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516116f4816003860160208901611561565b808401905081600382015284519150611714826004830160208801611561565b0160040195945050505050565b82815260406020820152600061055b6040830184611585565b6000600019820361174d5761174d61151f565b5060010190565b82815260006020808301845182860160005b8281101561178257815184529284019290840190600101611766565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081518084526020808501945080840160005b838110156117ee578151875295820195908201906001016117d2565b509495945050505050565b60608152600061180c60608301866117be565b65ffffffffffff85166020840152828103604084015261182c8185611585565b9695505050505050565b84815260806020820152600061184f60808301866117be565b65ffffffffffff85166040840152828103606084015261186f8185611585565b979650505050505050565b60608152600061188d6060830186611585565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b50610af5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638fc8cf7e116100505780638fc8cf7e146100df578063ce5e8dd9146100ff578063e1af802c1461011257600080fd5b806301ffc9a714610077578063119df25f1461009f57806345ec9354146100cc575b600080fd5b61008a61008536600461063e565b61011a565b60405190151581526020015b60405180910390f35b6100a76101b3565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b604051601f193601358152602001610096565b6100f26100ed3660046106d3565b6101c2565b6040516100969190610739565b6100f261010d3660046106d3565b6103d7565b6100a76105ae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101ad57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101bd6105b8565b905090565b606060006101ce6105ae565b90508267ffffffffffffffff8111156101e9576101e96107d1565b60405190808252806020026020018201604052801561021c57816020015b60608152602001906001900390816102075790505b50915060005b838110156103cf5760008073ffffffffffffffffffffffffffffffffffffffff84168063894ecc5889898781811061025c5761025c610800565b905060200281019061026e919061082f565b61027c90602081019061086d565b8a8a8881811061028e5761028e610800565b90506020028101906102a0919061082f565b602001358b8b898181106102b6576102b6610800565b90506020028101906102c8919061082f565b6102d69060408101906108a3565b6040516024016102e99493929190610933565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516103369250610973565b600060405180830381855af49150503d8060008114610371576040519150601f19603f3d011682016040523d82523d6000602084013e610376565b606091505b50915091508161038957610389816105ea565b8080602001905181019061039d9190610985565b8584815181106103af576103af610800565b6020026020010181905250505080806103c790610a32565b915050610222565b505092915050565b606060006103e36105ae565b90508267ffffffffffffffff8111156103fe576103fe6107d1565b60405190808252806020026020018201604052801561043157816020015b606081526020019060019003908161041c5790505b50915060005b838110156103cf5760008073ffffffffffffffffffffffffffffffffffffffff841680633ae7af0889898781811061047157610471610800565b90506020028101906104839190610a91565b358a8a8881811061049657610496610800565b90506020028101906104a89190610a91565b6104b69060208101906108a3565b6040516024016104c893929190610ac5565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516105159250610973565b600060405180830381855af49150503d8060008114610550576040519150601f19603f3d011682016040523d82523d6000602084013e610555565b606091505b50915091508161056857610568816105ea565b8080602001905181019061057c9190610985565b85848151811061058e5761058e610800565b6020026020010181905250505080806105a690610a32565b915050610437565b60006101bd6105f2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806105e75750335b90565b805160208201fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610639573391505090565b919050565b60006020828403121561065057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461068057600080fd5b9392505050565b60008083601f84011261069957600080fd5b50813567ffffffffffffffff8111156106b157600080fd5b6020830191508360208260051b85010111156106cc57600080fd5b9250929050565b600080602083850312156106e657600080fd5b823567ffffffffffffffff8111156106fd57600080fd5b61070985828601610687565b90969095509350505050565b60005b83811015610730578181015183820152602001610718565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156107c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526107a5818989018a8501610715565b601f01601f191695909501860194509285019290850190600101610760565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261086357600080fd5b9190910192915050565b60006020828403121561087f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461068057600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126108d857600080fd5b83018035915067ffffffffffffffff8211156108f357600080fd5b6020019150368190038213156106cc57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610969606083018486610908565b9695505050505050565b60008251610863818460208701610715565b60006020828403121561099757600080fd5b815167ffffffffffffffff808211156109af57600080fd5b818401915084601f8301126109c357600080fd5b8151818111156109d5576109d56107d1565b604051601f8201601f19908116603f011681019083821181831017156109fd576109fd6107d1565b81604052828152876020848701011115610a1657600080fd5b610a27836020830160208801610715565b979650505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261086357600080fd5b838152604060208201526000610adf604083018486610908565b9594505050505056fea164736f6c6343000815000a608060405234801561001057600080fd5b5061565b80620000216000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063530f4b6011610097578063b29e408911610066578063b29e408914610226578063bfdfaff714610239578063d5f8337f1461024c578063e1af802c1461025f57600080fd5b8063530f4b60146101da578063742d6118146101ed5780638da798da14610200578063a92813ad1461021357600080fd5b80631d2257ba116100d35780631d2257ba1461017557806326d98102146101885780633350b6a9146101b457806345ec9354146101c757600080fd5b806301ffc9a714610105578063056091291461012d5780630ba51f4914610142578063119df25f14610155575b600080fd5b610118610113366004614aa7565b610267565b60405190151581526020015b60405180910390f35b61014061013b366004614ad7565b6102d0565b005b610140610150366004614b53565b6102ef565b61015d6103bf565b6040516001600160a01b039091168152602001610124565b610140610183366004614ca0565b6103ce565b61019b610196366004614cf9565b61044e565b6040516001600160e01b03199091168152602001610124565b6101406101c2366004614d40565b610546565b604051601f193601358152602001610124565b6101406101e8366004614d98565b610731565b61019b6101fb366004614dd6565b610772565b61014061020e366004614e24565b61082d565b610140610221366004614ad7565b610946565b610140610234366004614e5e565b6109ba565b610140610247366004614e77565b610a5e565b61014061025a366004614d98565b610b28565b61015d610b8f565b60006001600160e01b031982167fb5dee1270000000000000000000000000000000000000000000000000000000014806102ca57506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6102e1826102dc6103bf565b610b99565b6102eb8282610c1f565b5050565b60006102fa89610c6c565b6fffffffffffffffffffffffffffffffff191603610359578761031c89610c83565b6040517fe4ac069e000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b60405180910390fd5b610389616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008a1617610d97565b610395886102dc6103bf565b6103b5888888886103a6888a614f1a565b6103b08789614f1a565b610de2565b5050505050505050565b60006103c9611082565b905090565b6103e06103d96103bf565b84846110b4565b6103e9826111de565b80156103f6575060008151115b15610449576000610406836111fa565b9050610432817faf585477000000000000000000000000000000000000000000000000000000006112d5565b61044661043d6103bf565b84846000611330565b50505b505050565b600061045c836102dc6103bf565b600061048561046b8560101b90565b71ffffffffffffffffffffffffffffffffffff191661135d565b9050600061049a61049586610c6c565b61135d565b905060008282866040516020016104b393929190614f9e565b60405160208183030381529060405290508080519060200120935060006104d9856113f1565b9050801561051f576040517f3d1d1ae20000000000000000000000000000000000000000000000000000000081526001600160e01b031986166004820152602401610350565b855160208701206105318689836114e0565b61053b86846115e8565b505050505092915050565b7f7379000000000000000000000000000000000000000000000000000000000000836001600160f01b031916146105d7577f7379000000000000000000000000000000000000000000000000000000000000836105a285610c83565b6040517f5c30fb6f00000000000000000000000000000000000000000000000000000000815260040161035093929190615014565b7dffffffffffffffffffffffffffff000000000000000000000000000000008316616e7360f01b1761060881610d97565b610614816102dc6103bf565b61063e837fb5dee127000000000000000000000000000000000000000000000000000000006112d5565b600061064985610c6c565b6fffffffffffffffffffffffffffffffff19160361066b578361031c85610c83565b6000610676846116ee565b905080158015906106875750848114155b156106c9576040517fc0b707410000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610350565b60006106d4866111fa565b90506001600160a01b038116156106fd576106ee816117d0565b6106f883826118a4565b610708565b610708866001611997565b610713868686611a8f565b61071d8587611b6f565b61072983866001611c0f565b505050505050565b61075b827f1873396a000000000000000000000000000000000000000000000000000000006112d5565b610767836102dc6103bf565b610449838383611cce565b60408051616e7360f01b602082015260006022820181905260308201819052916107b791016040516020818303038152906040526107af9061503d565b6102dc6103bf565b508151602083012060006107ca826113f1565b90508015610810576040517f3d1d1ae20000000000000000000000000000000000000000000000000000000081526001600160e01b031983166004820152602401610350565b61081b8286856114e0565b61082582856115e8565b509392505050565b610857827f780ac2fc000000000000000000000000000000000000000000000000000000006112d5565b6108d36108626103bf565b600084846040516024016108769190615061565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f13861fb500000000000000000000000000000000000000000000000000000000179052611d2f565b506102eb826001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109399190615074565b8251602084012084611d40565b610952826102dc6103bf565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d486f6f6b7300000000000000000000000000000000000000000060308201526102eb91015b6040516020818303038152906040526109b39061503d565b8383611e73565b616e7360f01b816001600160f01b031916146109e057616e7360f01b816105a283610c83565b6109e981611f9a565b15610a2c57806109f882610c83565b6040517f0dc28f6a000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b610a37816001611997565b610a4881610a436103bf565b61207c565b610a5b81610a546103bf565b6001611c0f565b50565b616e7360f01b836001600160f01b03191614610a8457616e7360f01b836105a285610c83565b610a8d826111de565b610ac3576040517f71ee9e8100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610acf836102dc6103bf565b6000610ada836111fa565b9050610b06817faf585477000000000000000000000000000000000000000000000000000000006112d5565b610b108484612110565b815115610b225761044661043d6103bf565b50505050565b610b52827f540fbfa8000000000000000000000000000000000000000000000000000000006112d5565b610b5e836102dc6103bf565b610449836bffffffffffffffffffffffff19606085901b166bff0000000000000000000000605885901b16176121a4565b60006103c9612293565b6001600160a01b038116610bd3616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008516176122d2565b6001600160a01b0316146102eb57610bea82610c83565b816040517fd787b7370000000000000000000000000000000000000000000000000000000081526004016103509291906150a7565b60408051613a3160f11b60208201526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201526102eb910161099b565b6000610c7a607060106150e8565b9190911b919050565b606081601081901b6000610c9683610c6c565b90508271ffffffffffffffffffffffffffffffffffff19831615610cd757610cd271ffffffffffffffffffffffffffffffffffff19841661135d565b610d0e565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6fffffffffffffffffffffffffffffffff19831615610d3557610d308361135d565b610d6c565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b604051602001610d7e939291906150fb565b6040516020818303038152906040529350505050919050565b610da081611f9a565b610a5b5780610dae82610c83565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b613a3160f11b866001600160f01b03191614801590610e105750611bdd60f21b866001600160f01b03191614155b15610e7157613a3160f11b8687604051602001610e2f91815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252610350939291600401615014565b610e7a856123a2565b610e85846001612523565b610e90836000612523565b60e084901c60e885901c0160ff16825114610ef05760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b60e085901c60e886901c0160ff16815114610f505760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff1614610fc85760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b610fd186611f9a565b1561102b578586604051602001610fea91815260200190565b60408051601f19818403018152908290527fdfaaf9cf0000000000000000000000000000000000000000000000000000000082526103509291600401614f01565b61107786868686866040516020016110439190615171565b604051602081830303815290604052866040516020016110639190615171565b6040516020818303038152906040526126cf565b610729866001611997565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806110b15750335b90565b604080516002808252606082018352600092602083019080368337019050509050836001600160a01b031660001b816000815181106110f5576110f56151f1565b602002602001018181525050826001600160a01b031660001b81600181518110611121576111216151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5573657244656c65676174696f6e436f000000000000000000000000000000006030830152610b2291015b6040516020818303038152906040526111939061503d565b826000856040516020016111a991815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006127d3565b600081151580156102ca57506111f3826127e8565b1592915050565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611233576112336151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000906112ca906112a29061503d565b8360007e15020014010000000000000000000000000000000000000000000000000000612863565b60601c949350505050565b6112df8282612899565b6102eb576040517f74b5e6ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526001600160e01b031982166024820152604401610350565b6060600080611341878787876128bc565b91509150816113535761135381612aa0565b9695505050505050565b606060005b60108110156113bd576fffffffffffffffffffffffffffffffff198316600882021b7fff0000000000000000000000000000000000000000000000000000000000000016156113bd57806113b581615207565b915050611362565b604080516fffffffffffffffffffffffffffffffff198516602082015281516030909101909152818152805b949350505050565b60408051600180825281830190925260009182919060208083019080368337019050509050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681600081518110611449576114496151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015281518082039093018352810190526000906113e9906114b89061503d565b8360007e24020020040000000000000000000000000000000000000000000000000000612863565b60006114ec8383612aa8565b60408051600180825281830190925291925060009160609183919060208083019080368337019050509050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061154a5761154a6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015281518082039093018352810190526115df906115b69061503d565b828686867e24020020040000000000000000000000000000000000000000000000000000612ae7565b50505050505050565b606060006115f583612e01565b9050600061160284612e11565b6040805160018082528183019092529192506000919060208083019080368337019050509050857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061165b5761165b6151f1565b60209081029190910181019190915260408051611bdd60f21b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e5369676e617475720000000000000000000000000000000060308201528151808203909301835281019052610729906116c79061503d565b828686867c0100000000000000000000000000000000000000000000000000000000612ae7565b60408051600180825281830190925260009182919060208083019080368337019050509050826001600160a01b031660001b81600081518110611733576117336151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d526567697374727900000000000000000000000000000000000060308301526000916113e991015b6040516020818303038152906040526117a89061503d565b8360007e20010020000000000000000000000000000000000000000000000000000000612863565b60408051600180825281830190925260009160208083019080368337019050509050816001600160a01b031660001b81600081518110611812576118126151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d5265676973747279000000000000000000000000000000000000603082015281518082039093018352810190526102eb9061187e9061503d565b827e20010020000000000000000000000000000000000000000000000000000000612e3a565b60408051600280825260608201835260009260208301908036833701905050905082816000815181106118d9576118d96151f1565b602002602001018181525050816001600160a01b031660001b81600181518110611905576119056151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f7572636541636365737300000000000000000000000000000000000060308201528151808203909301835281019052610449906119719061503d565b827e01010001000000000000000000000000000000000000000000000000000000612e3a565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106119cd576119cd6151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015261044991015b604051602081830303815290604052611a3f9061503d565b82600085604051602001611a5a91151560f81b815260010190565b60408051601f198184030181529190527e010100010000000000000000000000000000000000000000000000000000006127d3565b6000611a9b838361311a565b604080516001808252818301909252919250600091606091839190602080830190803683370190505090508681600081518110611ada57611ada6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526115df90611b469061503d565b828686867e15020014010000000000000000000000000000000000000000000000000000612ae7565b60408051600180825281830190925260009160208083019080368337019050509050826001600160a01b031660001b81600081518110611bb157611bb16151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d52656769737472790000000000000000000000000000000000006030830152610449910161117b565b6040805160028082526060820183526000926020830190803683370190505090508381600081518110611c4457611c446151f1565b602002602001018181525050826001600160a01b031660001b81600181518110611c7057611c706151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152610b229101611a27565b613a3160f11b836001600160f01b03191614611cfe57613a3160f11b8384604051602001610e2f91815260200190565b610449836bffffffffffffffffffffffff19606085901b166bff0000000000000000000000605885901b161761314a565b6060600080611341878787876131de565b604080516002808252606082018352600092602083019080368337019050509050836fffffffffffffffffffffffffffffffff191681600081518110611d8857611d886151f1565b6020026020010181815250508281600181518110611da857611da86151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f496e7374616c6c65644d6f64756c6573000000000000000000000000000000006030830152610b2291015b604051602081830303815290604052611e1a9061503d565b6040516bffffffffffffffffffffffff19606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006127d3565b6000611e7f8484613256565b90506000815167ffffffffffffffff811115611e9d57611e9d614be9565b604051908082528060200260200182016040528015611ec6578160200160208202803683370190505b5090506000805b8351811015611f8b57846001600160a01b0316611f11858381518110611ef557611ef56151f1565b60200260200101516affffffffffffffffffffff191660601c90565b6001600160a01b031614611f8357838181518110611f3157611f316151f1565b6020026020010151838381518110611f4b57611f4b6151f1565b7fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000909216602092830291909101909101526001909101905b600101611ecd565b508082526107298686846132c1565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611fd357611fd36151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015260009161207091015b6040516020818303038152906040526120489061503d565b8360007e01010001000000000000000000000000000000000000000000000000000000612863565b90506113e98160f81c90565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106120b2576120b26151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d6573706163654f776e657200000000000000000000000000000000000060308301526104499101611e02565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110612146576121466151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d65737061636544656c65676174000000000000000000000000000000006030830152610449910161117b565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106121da576121da6151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b73000000000000000000000000000000000000000000603083015261044991015b60405160208183030381529060405261224c9061503d565b6040517fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000851660208201528390600090603501604051602081830303815290604052613318565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e175546000906001600160a01b0316806122cd573391505090565b919050565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061230b5761230b6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906112ca9061237a9061503d565b8360007e14010014000000000000000000000000000000000000000000000000000000612863565b806123d9576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006123e4826133c9565b9050600581111561242b576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401610350565b600061243683613406565b9050600061244483836150e8565b9050601c81111561248b576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401610350565b60005b828110156104465760ff601b82900360080286901c1660008190036124df576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081111561251a576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060010161248e565b8015801561252f575081155b1561255057604051635318beb960e01b815260006004820152602401610350565b600061255b836133c9565b9050600581111561258257604051635318beb960e01b815260048101829052602401610350565b600061258d84613406565b9050600061259b83836150e8565b9050601c8111156125c257604051635318beb960e01b815260048101829052602401610350565b60008060005b838110156126885760006125f56125df8a84613418565b60c58111156125f0576125f0615221565b613439565b111561263f57848110612634576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600190920191612680565b84811015612679576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b6001016125c8565b508382146126ac57604051635318beb960e01b815260048101839052602401610350565b8481146115df57604051635318beb960e01b815260048101829052602401610350565b60006126dc868686613499565b905060006126ea84846134cf565b905060006126f885856134ec565b60408051600180825281830190925291925060009190602080830190803683370190505090508981600081518110612732576127326151f1565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526127c79061279e9061503d565b828686867e60030220202000000000000000000000000000000000000000000000000000612ae7565b50505050505050505050565b61044685856127e28487613501565b8561353c565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201526000602282018190527f756e6c696d6974656400000000000000000000000000000000000000000000006030830152910160405160208183030381529060405261285b9061503d565b909114919050565b600061289061287286866137b8565b60ff858116601b0360080285901c1661288b8587613501565b61380e565b95945050505050565b60006128a48361385f565b80156128b557506128b583836138a0565b9392505050565b6000606060006128cb86613958565b905060005b81518110156129a85760008282815181106128ed576128ed6151f1565b602002602001015190506129196001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612995576040517fc3323031000000000000000000000000000000000000000000000000000000008152606082901c9063c332303190612962908c908c908c90600401615237565b600060405180830381600087803b15801561297c57600080fd5b505af1158015612990573d6000803e3d6000fd5b505050505b50806129a081615207565b9150506128d0565b506129b587858888613a3f565b909350915060005b8151811015612a955760008282815181106129da576129da6151f1565b60200260200101519050612a066002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612a82576040517f973d8f99000000000000000000000000000000000000000000000000000000008152606082901c9063973d8f9990612a4f908c908c908c90600401615237565b600060405180830381600087803b158015612a6957600080fd5b505af1158015612a7d573d6000803e3d6000fd5b505050505b5080612a8d81615207565b9150506129bd565b505094509492505050565b805160208201fd5b60608282604051602001612ad09291909182526001600160e01b031916602082015260240190565b604051602081830303815290604052905092915050565b611bdd60f21b866001600160f01b03191603612b4057857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a986868686604051612b33949392919061529a565b60405180910390a2610729565b6000612b4b87613b1e565b905060005b8151811015612c2e576000828281518110612b6d57612b6d6151f1565b60200260200101519050612b996001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612c1b576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90612be8908c908c908c908c908c908c906004016152d9565b600060405180830381600087803b158015612c0257600080fd5b505af1158015612c16573d6000803e3d6000fd5b505050505b5080612c2681615207565b915050612b50565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051612c65949392919061529a565b60405180910390a26000612c7988886137b8565b90506000602087019050612c91826000895184613bb9565b6000612c9c856133c9565b1115612d20576000612cae8a8a613c79565b878155905060208601915060008060005b612cc8886133c9565b8160ff161015612d1b57612cdd8d8d83613ccf565b9250612cf88a8260ff166028026038011c64ffffffffff1690565b9150612d078360008488613bb9565b612d1182866150e8565b9450600101612cbf565b505050505b60005b83518110156127c7576000848281518110612d4057612d406151f1565b60200260200101519050612d6c6002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612dee576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90612dbb908e908e908e908e908e908e906004016152d9565b600060405180830381600087803b158015612dd557600080fd5b505af1158015612de9573d6000803e3d6000fd5b505050505b5080612df981615207565b915050612d23565b60006102ca8251603881901b1790565b606081604051602001612e249190615332565b6040516020818303038152906040529050919050565b611bdd60f21b836001600160f01b03191603612e8d57827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0783604051612e80919061534e565b60405180910390a2505050565b6000612e9884613b1e565b905060005b8151811015612f75576000828281518110612eba57612eba6151f1565b60200260200101519050612ee66040826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612f62576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf4590612f2f90899089908990600401615361565b600060405180830381600087803b158015612f4957600080fd5b505af1158015612f5d573d6000803e3d6000fd5b505050505b5080612f6d81615207565b915050612e9d565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0784604051612fa6919061534e565b60405180910390a26000612fba85856137b8565b9050613013816000612fcb86613d4f565b67ffffffffffffffff811115612fe357612fe3614be9565b6040519080825280601f01601f19166020018201604052801561300d576020820181803683370190505b50613d72565b600061301e846133c9565b111561303f5760006130308686613c79565b905061303d816020613d88565b505b60005b825181101561072957600083828151811061305f5761305f6151f1565b6020026020010151905061308b6080826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613107576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b906130d4908a908a908a90600401615361565b600060405180830381600087803b1580156130ee57600080fd5b505af1158015613102573d6000803e3d6000fd5b505050505b508061311281615207565b915050613042565b604051606083811b6bffffffffffffffffffffffff1916602083015282151560f81b603483015290603501612ad0565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110613180576131806151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308301526104499101612234565b60006060836001600160a01b031660006131f9858989613dc5565b6040516132069190615332565b60006040518083038185875af1925050503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b606091505b509097909650945050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613290576132906151f1565b60200260200101818152505060006132aa85836000613ddc565b90506128906132bc8260008451613e16565b613ea6565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106132f7576132f76151f1565b602002602001018181525050610b228482600061331386613eb7565b613ec7565b6000613322612293565b9050306001600160a01b038216036133455761334085858585613f02565b610446565b6040517f150f32620000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063150f32629061339090889088908890889060040161538a565b600060405180830381600087803b1580156133aa57600080fd5b505af11580156133be573d6000803e3d6000fd5b505050505050505050565b600060086001806133dc600260206153be565b6133e691906153be565b6133f091906153be565b6133fa91906153d1565b8260ff911c1692915050565b6000600860016133e6600260206153be565b6000601b8290036008028360ff911c1660c58111156128b5576128b5615221565b6000808260c581111561344e5761344e615221565b60ff169050606181101561346857601f1660010192915050565b60618360c581111561347c5761347c615221565b0361348a5750601492915050565b50600092915050565b50919050565b60408051602081018590529081018390526060818101839052906080015b60405160208183030381529060405290509392505050565b8151815160009181810160389190911b1760609190911b176128b5565b60608282604051602001612ad09291906153e8565b600080805b8360ff168110156108255761352860ff601b83900360080287901c16836150e8565b91508061353481615207565b915050613506565b611bdd60f21b846001600160f01b0319160361359357837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161358693929190615417565b60405180910390a2610b22565b600061359f85856137b8565b905060006135ac86613b1e565b905060005b815181101561368b5760008282815181106135ce576135ce6151f1565b602002602001015190506135fa6004826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613678576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90613645908b908b908b908b9060040161544a565b600060405180830381600087803b15801561365f57600080fd5b505af1158015613673573d6000803e3d6000fd5b505050505b508061368381615207565b9150506135b1565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8686866040516136c093929190615417565b60405180910390a26136db828565ffffffffffff1685613d72565b60005b81518110156115df5760008282815181106136fb576136fb6151f1565b602002602001015190506137276008826affffffffffffffffffffff1916613a2190919063ffffffff16565b156137a5576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190613772908b908b908b908b9060040161544a565b600060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050505b50806137b081615207565b9150506136de565b600082826040516020016137cd929190615483565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b60006020821061383457602082048401935060208281613830576138306154be565b0691505b508254600882021b602082900380841115610825576001850154600882021c82179150509392505050565b600061388b827f01ffc9a7000000000000000000000000000000000000000000000000000000006138a0565b80156102ca57506111f3826001600160e01b03195b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613941575060208210155b801561394d5750600081115b979650505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613992576139926151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b730000000000000000000000000000000000000000006030830152600091613a0f91015b604051602081830303815290604052613a079061503d565b836000613ddc565b90506113e96132bc8260008451613e16565b60008160ff1682613a328560581c90565b1660ff1614905092915050565b60006060600080613a4f86613f3d565b90925090506001600160a01b038216613a6c5785610dae87610c83565b80613a7b57613a7b8689614035565b8615613acc577dffffffffffffffffffffffffffff000000000000000000000000000000008616616e7360f01b176000613ab48261404c565b9050613ac982613ac48b846150e8565b6140e6565b50505b6000613ad88760101b90565b71ffffffffffffffffffffffffffffffffffff191614613b0357613afe888884886131de565b613b0f565b613b0f8888848861417a565b90999098509650505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613b5857613b586151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b73000000000000000000000000000000000000000000006030830152600091613a0f91016139ef565b8215613c335760208310613be357602083048401935060208381613bdf57613bdf6154be565b0692505b8215613c335760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411613c24575050610b22565b50600194909401939182900391015b5b60208210613c555780518455600190930192601f1990910190602001613c34565b8115610b22576000600019600884021c198554835182169119161785555050505050565b60008282604051602001613c8e929190615483565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b60008383604051602001613ce4929190615483565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006008613d5f600260206153be565b613d6991906153d1565b9190911c919050565b61044983838351613d838560200190565b613bb9565b60006020613d9783601f6150e8565b613da191906154d4565b613dab90846150e8565b90505b808310156104495760008355600183019250613dae565b60608383836040516020016134b7939291906154f6565b60606113e9613dec858585613ccf565b6000613e1185613dfc89896141db565b9060ff166028026038011c64ffffffffff1690565b6141ee565b6000818311158015613e29575083518211155b613e65578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161035093929190615535565b60208401613e7384826150e8565b90506000613e8185856153be565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006128b58360156000614211565b6060816128b5816015600061428c565b6000613ed385856141db565b90506000613ef0828560ff166028026038011c64ffffffffff1690565b905061072986868660008588886142e0565b6000613f0e85856141db565b90506000613f2b828560ff166028026038011c64ffffffffff1690565b905061072986868684600088886142e0565b60408051600180825281830190925260009182918291602080830190803683370190505090508381600081518110613f7757613f776151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000908190819061401090613fea9061503d565b857e1502001401000000000000000000000000000000000000000000000000000061469c565b5050602081015160349091015160609190911c9860f89190911c975095505050505050565b61403f82826147a4565b6102eb57610bea82610c83565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110614085576140856151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e63657300000000000000000000000000000000000000000000000060308301526000916113e99101611790565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061411c5761411c6151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e6365730000000000000000000000000000000000000000000000006030830152610449910161117b565b60006060836001600160a01b0316614193848888613dc5565b6040516141a09190615332565b600060405180830381855af49150503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b60006128b56141ea8484613c79565b5490565b60405160208101601f19603f8484010116604052828252610825858585846147e7565b6060600061421f8560801c90565b90506fffffffffffffffffffffffffffffffff85166000858281614245576142456154be565b04905060405193506020840160208202810160405281855260005b82811015614280578451871c825293870193602090910190600101614260565b50505050509392505050565b8251606090600061429d85836153d1565b9050604051925060208301601f19603f83860101166040528184526000602088015b84821015614280578051871b835291870191600191909101906020016142bf565b613a3160f11b876001600160f01b0319161461431057613a3160f11b8788604051602001610e2f91815260200190565b600061432b828760ff166028026038011c64ffffffffff1690565b9050600083518564ffffffffff168361434491906153be565b61434e91906150e8565b9050808214158015614370575081614366868861555a565b64ffffffffff1614155b156143c0576040517fa65010b400000000000000000000000000000000000000000000000000000000815264ffffffffff8088166004830152808716602483015283166044820152606401610350565b818664ffffffffff161115614411576040517f7e8578d30000000000000000000000000000000000000000000000000000000081526004810183905264ffffffffff87166024820152604401610350565b600061441e8489846148b6565b9050600061442b8b613b1e565b905060005b815181101561450057600082828151811061444d5761444d6151f1565b602002602001015190506144796010826affffffffffffffffffffff1916613a2190919063ffffffff16565b156144ed57606081901c6001600160a01b03166355eb5a288e8e8e8e8e8d8f6040518863ffffffff1660e01b81526004016144ba979695949392919061557f565b600060405180830381600087803b1580156144d457600080fd5b505af11580156144e8573d6000803e3d6000fd5b505050505b50806144f881615207565b915050614430565b5064ffffffffff881660005b8a60ff168160ff16101561453f57614533878260ff166028026038011c64ffffffffff1690565b9091019060010161450c565b508b7faa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b48c838b878c6040516145789594939291906155dd565b60405180910390a2508284146145995760006145948c8c613c79565b839055505b60006145a68c8c8c613ccf565b90506145ba818a64ffffffffff1689613d72565b5060005b815181101561468e5760008282815181106145db576145db6151f1565b602002602001015190506146076020826affffffffffffffffffffff1916613a2190919063ffffffff16565b1561467b57606081901c6001600160a01b031663635845338e8e8e8e8e8a8f6040518863ffffffff1660e01b8152600401614648979695949392919061557f565b600060405180830381600087803b15801561466257600080fd5b505af1158015614676573d6000803e3d6000fd5b505050505b508061468681615207565b9150506145be565b505050505050505050505050565b60606000606060006146ad85613d4f565b90506146ba878783614984565b935060006146c7866133c9565b90508015614799576146d988886141db565b935066ffffffffffffff841667ffffffffffffffff8111156146fd576146fd614be9565b6040519080825280601f01601f191660200182016040528015614727576020820181803683370190505b5092506020830160005b828160ff1610156147965760006147498b8b84613ccf565b90506000614766888460ff166028026038011c64ffffffffff1690565b905061477582600083876147e7565b61477f81856150e8565b93505050808061478e9061562f565b915050614731565b50505b505093509350939050565b60006147d7616e7360f01b7dffffffffffffffffffffffffffff00000000000000000000000000000000851617836149bd565b806128b557506128b583836149bd565b821561487057602083106148115760208304840193506020838161480d5761480d6154be565b0692505b82156148705760208390036000818410156148355750600019600884021c19614840565b50600019600882021c195b8554600886021b811984511682821617845250818411614861575050610b22565b50600194909401939182900391015b5b602082106148925783548152600190930192601f1990910190602001614871565b8115610b22576000600019600884021c198251865482169119161782525050505050565b600064ffffffffff8211156148fa576040517f4767058800000000000000000000000000000000000000000000000000000000815260048101839052602401610350565b8366ffffffffffffff811660ff851660280260380182901c64ffffffffff1680851061492c5780850382019150614934565b848103820391505b5064ffffffffff6038602860ff8816020181811b197fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009490941690921792909216918416901b1790509392505050565b6060816000036149a357506040805160208101909152600081526128b5565b60006149af85856137b8565b9050612890816000856141ee565b6040805160028082526060820183526000928392919060208301908036833701905050905083816000815181106149f6576149f66151f1565b602002602001018181525050826001600160a01b031660001b81600181518110614a2257614a226151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152600091614a839101612030565b90506128908160f81c90565b80356001600160e01b0319811681146122cd57600080fd5b600060208284031215614ab957600080fd5b6128b582614a8f565b6001600160a01b0381168114610a5b57600080fd5b60008060408385031215614aea57600080fd5b823591506020830135614afc81614ac2565b809150509250929050565b60008083601f840112614b1957600080fd5b50813567ffffffffffffffff811115614b3157600080fd5b6020830191508360208260051b8501011115614b4c57600080fd5b9250929050565b60008060008060008060008060c0898b031215614b6f57600080fd5b88359750602089013596506040890135955060608901359450608089013567ffffffffffffffff80821115614ba357600080fd5b614baf8c838d01614b07565b909650945060a08b0135915080821115614bc857600080fd5b50614bd58b828c01614b07565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614c2857614c28614be9565b604052919050565b600082601f830112614c4157600080fd5b813567ffffffffffffffff811115614c5b57614c5b614be9565b614c6e6020601f19601f84011601614bff565b818152846020838601011115614c8357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215614cb557600080fd5b8335614cc081614ac2565b925060208401359150604084013567ffffffffffffffff811115614ce357600080fd5b614cef86828701614c30565b9150509250925092565b60008060408385031215614d0c57600080fd5b82359150602083013567ffffffffffffffff811115614d2a57600080fd5b614d3685828601614c30565b9150509250929050565b600080600060608486031215614d5557600080fd5b833592506020840135614d6781614ac2565b915060408401358015158114614d7c57600080fd5b809150509250925092565b803560ff811681146122cd57600080fd5b600080600060608486031215614dad57600080fd5b833592506020840135614dbf81614ac2565b9150614dcd60408501614d87565b90509250925092565b600080600060608486031215614deb57600080fd5b83359250602084013567ffffffffffffffff811115614e0957600080fd5b614e1586828701614c30565b925050614dcd60408501614a8f565b60008060408385031215614e3757600080fd5b8235614e4281614ac2565b9150602083013567ffffffffffffffff811115614d2a57600080fd5b600060208284031215614e7057600080fd5b5035919050565b600080600060608486031215614e8c57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614ce357600080fd5b60005b83811015614ecc578181015183820152602001614eb4565b50506000910152565b60008151808452614eed816020860160208601614eb1565b601f01601f19169290920160200192915050565b8281526040602082015260006113e96040830184614ed5565b600067ffffffffffffffff80841115614f3557614f35614be9565b8360051b6020614f46818301614bff565b868152918501918181019036841115614f5e57600080fd5b865b84811015614f9257803586811115614f785760008081fd5b614f8436828b01614c30565b845250918301918301614f60565b50979650505050505050565b60008451614fb0818460208901614eb1565b80830190507f5f000000000000000000000000000000000000000000000000000000000000008082528551614fec816001850160208a01614eb1565b60019201918201528351615007816002840160208801614eb1565b0160020195945050505050565b6001600160f01b0319841681528260208201526060604082015260006128906060830184614ed5565b805160208083015191908110156134935760001960209190910360031b1b16919050565b6020815260006128b56020830184614ed5565b60006020828403121561508657600080fd5b81516fffffffffffffffffffffffffffffffff19811681146128b557600080fd5b6040815260006150ba6040830185614ed5565b90506001600160a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102ca576102ca6150d2565b6001600160f01b03198416815260007f3a000000000000000000000000000000000000000000000000000000000000008060028401528451615144816003860160208901614eb1565b808401905081600382015284519150615164826004830160208801614eb1565b0160040195945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156151e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526151d2858351614ed5565b94509285019290850190600101615198565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600019820361521a5761521a6150d2565b5060010190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03841681528260208201526060604082015260006128906060830184614ed5565b600081518084526020808501945080840160005b8381101561528f57815187529582019590820190600101615273565b509495945050505050565b6080815260006152ad608083018761525f565b82810360208401526152bf8187614ed5565b9050846040840152828103606084015261394d8185614ed5565b86815260c0602082015260006152f260c083018861525f565b82810360408401526153048188614ed5565b9050856060840152828103608084015261531e8186614ed5565b9150508260a0830152979650505050505050565b60008251615344818460208701614eb1565b9190910192915050565b6020815260006128b5602083018461525f565b83815260606020820152600061537a606083018561525f565b9050826040830152949350505050565b8481526080602082015260006153a3608083018661525f565b60ff85166040840152828103606084015261394d8185614ed5565b818103818111156102ca576102ca6150d2565b80820281158282048414176102ca576102ca6150d2565b600083516153fa818460208801614eb1565b83519083019061540e818360208801614eb1565b01949350505050565b60608152600061542a606083018661525f565b65ffffffffffff8516602084015282810360408401526113538185614ed5565b848152608060208201526000615463608083018661525f565b65ffffffffffff85166040840152828103606084015261394d8185614ed5565b82815260006020808301845182860160005b828110156154b157815184529284019290840190600101615495565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826154f157634e487b7160e01b600052601260045260246000fd5b500490565b60008451615508818460208901614eb1565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b6060815260006155486060830186614ed5565b60208301949094525060400152919050565b64ffffffffff818116838216019080821115615578576155786150d2565b5092915050565b87815260e06020820152600061559860e083018961525f565b60ff8816604084015264ffffffffff87811660608501528616608084015260a0830185905282810360c08401526155cf8185614ed5565b9a9950505050505050505050565b60a0815260006155f060a083018861525f565b65ffffffffffff8716602084015264ffffffffff8616604084015284606084015282810360808401526156238185614ed5565b98975050505050505050565b600060ff821660ff8103615645576156456150d2565b6001019291505056fea164736f6c6343000815000a6101006040523480156200001257600080fd5b5060405162004c6d38038062004c6d833981016040819052620000359162000071565b6001600160a01b0393841660805291831660a052821660c0521660e052620000d9565b6001600160a01b03811681146200006e57600080fd5b50565b600080600080608085870312156200008857600080fd5b8451620000958162000058565b6020860151909450620000a88162000058565b6040860151909350620000bb8162000058565b6060860151909250620000ce8162000058565b939692955090935050565b60805160a05160c05160e051614b4c62000121600039600081816106a20152818161159201526116210152600061063a015260006105d2015260006105510152614b4c6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806317d7de7c1161005b57806317d7de7c146100ec57806345ec93541461011a5780637c5b03351461012d578063e1af802c1461014057600080fd5b806301ffc9a714610082578063119df25f146100aa57806313861fb5146100d7575b600080fd5b610095610090366004614310565b610148565b60405190151581526020015b60405180910390f35b6100b261022d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100ea6100e5366004614368565b61023c565b005b6040517f636f72650000000000000000000000000000000000000000000000000000000081526020016100a1565b604051601f1936013581526020016100a1565b6100ea61013b366004614368565b61026e565b6100b2610289565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780ac2fc0000000000000000000000000000000000000000000000000000000014806101db57507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b8061022757507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000610237610293565b905090565b6040517fea8b184c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102766102c5565b61027e61050f565b6102866106c8565b50565b6000610237610bcb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102c25750335b90565b6102cd610c17565b6102d5610c2f565b6102dd610cd4565b6102e5610d5c565b6102ed610dfc565b6102f5610e84565b6102fd610f04565b610305610f8c565b61030d61102c565b6103156110cc565b61031d61116a565b610325611208565b60408051616e7360f01b6020820152600060228201819052603082015261036791015b60405160208183030381529060405261036090614419565b6001611290565b60408051616e7360f01b602082015260006022820181905260308201526103af91015b6040516020818303038152906040526103a290614419565b6103aa61022d565b611375565b60408051616e7360f01b602082015260006022820181905260308201526103f991015b6040516020818303038152906040526103ea90614419565b6103f261022d565b6001611483565b60408051616e7360f01b60208201526473746f726560d81b6022820152600060308201526104279101610348565b60408051616e7360f01b60208201526473746f726560d81b602282015260006030820152610455910161038a565b60408051616e7360f01b60208201526473746f726560d81b60228201526000603082015261048391016103d2565b60408051616e7360f01b6020820152641ddbdc9b1960da1b6022820152600060308201526104b19101610348565b60408051616e7360f01b6020820152641ddbdc9b1960da1b6022820152600060308201526104df910161038a565b60408051616e7360f01b6020820152641ddbdc9b1960da1b60228201526000603082015261050d91016103d2565b565b6040805161737960f01b6020820152600060228201527f4163636573734d616e6167656d656e74000000000000000000000000000000006030820152610590917f000000000000000000000000000000000000000000000000000000000000000091015b60405160208183030381529060405261058b90614419565b611555565b6040805161737960f01b6020820152600060228201527f42616c616e63655472616e73666572000000000000000000000000000000000060308201526105f8917f00000000000000000000000000000000000000000000000000000000000000009101610573565b6040805161737960f01b6020820152600060228201527f426174636843616c6c00000000000000000000000000000000000000000000006030820152610660917f00000000000000000000000000000000000000000000000000000000000000009101610573565b6040805161737960f01b6020820152600060228201527f436f7265526567697374726174696f6e00000000000000000000000000000000603082015261050d917f00000000000000000000000000000000000000000000000000000000000000009101610573565b600060405180606001604052806040518060400160405280601c81526020017f6772616e7441636365737328627974657333322c61646472657373290000000081525081526020016040518060400160405280601d81526020017f7265766f6b6541636365737328627974657333322c61646472657373290000008152508152602001604051806060016040528060228152602001614b1e602291399052905060005b60038110156107fb576040805161737960f01b6020820152600060228201527f4163636573734d616e6167656d656e740000000000000000000000000000000060308201526107e991016040516020818303038152906040526107cd90614419565b8383600381106107df576107df61443d565b6020020151611612565b806107f381614469565b91505061076b565b506040805160a0810182526033918101828152600092829190614ac2606084013981526020016040518060600160405280603181526020016149b7603191399052905060005b60028110156108c8576040805161737960f01b6020820152600060228201527f42616c616e63655472616e73666572000000000000000000000000000000000060308201526108b691015b6040516020818303038152906040526108a490614419565b8383600281106107df576107df61443d565b806108c081614469565b915050610841565b50600060405180604001604052806040518060400160405280601c81526020017f626174636843616c6c2828627974657333322c6279746573295b5d29000000008152508152602001604051806060016040528060288152602001614a43602891399052905060005b6002811015610992576040805161737960f01b6020820152600060228201527f426174636843616c6c00000000000000000000000000000000000000000000006030820152610980910161088c565b8061098a81614469565b915050610931565b50604080516101c081018252601c61018082019081527f696e7374616c6c4d6f64756c6528616464726573732c627974657329000000006101a08301528152815160608101835282815260009260208084019291906149029083013981526020016040518060600160405280602881526020016149e86028913981526020016040518060600160405280602481526020016148de6024913981526020016040518060400160405280601a81526020017f72656769737465724e616d6573706163652862797465733332290000000000008152508152602001604051806060016040528060298152602001614af5602991398152602001604051806060016040528060258152602001614a6b60259139815260200160405180606001604052806024815260200161499360249139815260200160405180606001604052806028815260200161496b602891398152602001604051806060016040528060338152602001614a10603391398152602001604051806060016040528060298152602001614942602991398152602001604051806060016040528060328152602001614a90603291399052905060005b600c811015610bc4576040805161737960f01b6020820152600060228201527f436f7265526567697374726174696f6e000000000000000000000000000000006030820152610bb29101604051602081830303815290604052610ba090614419565b8383600c81106107df576107df61443d565b80610bbc81614469565b915050610b3e565b5050505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610c12573391505090565b919050565b610c1f6116b9565b610c27611759565b61050d6117f7565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610c8f90614419565b7e14010014000000000000000000000000000000000000000000000000000000610cb761187f565b610cbf6118f7565b610cc7611931565b610ccf6119b6565b611a2d565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610d3490614419565b630100080160dd1b610d4461187f565b610d4c611b01565b610d54611931565b610ccf611b3b565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f496e7374616c6c65644d6f64756c657300000000000000000000000000000000603082015261050d9101604051602081830303815290604052610dbc90614419565b7e14010014000000000000000000000000000000000000000000000000000000610de4611bb2565b610dec6118f7565b610df4611c31565b610ccf611cfb565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f5573657244656c65676174696f6e436f00000000000000000000000000000000603082015261050d9101604051602081830303815290604052610e5c90614419565b630100080160dd1b610e6c611d72565b610e7461187f565b610e7c611df1565b610ccf611ebb565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f4e616d65737061636544656c6567617400000000000000000000000000000000603082015261050d9101604051602081830303815290604052610ee490614419565b630100080160dd1b610ef461187f565b610efc61187f565b610e7c611931565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f5265736f75726365416363657373000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610f6490614419565b630101000160d81b610f74611f32565b610f7c611f6c565b610f84611fa6565b610ccf612070565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610fec90614419565b7e1502001401000000000000000000000000000000000000000000000000000061101461187f565b61101c6120e7565b611024612166565b610ccf6121dd565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015261050d910160405160208183030381529060405261108c90614419565b7e240200200400000000000000000000000000000000000000000000000000006110b46122a7565b6110bc6122e1565b6110c4612360565b610ccf6123d7565b60408051611bdd60f21b6020820152641ddbdc9b1960da1b60228201527f46756e6374696f6e5369676e6174757200000000000000000000000000000000603082015261050d910160405160208183030381529060405261112c90614419565b7c01000000000000000000000000000000000000000000000000000000006111526122a7565b61115a6124a1565b611162612360565b610ccf6124db565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d486f6f6b73000000000000000000000000000000000000000000603082015261050d91016040516020818303038152906040526111ca90614419565b7c01000000000000000000000000000000000000000000000000000000006111f061187f565b6111f8612552565b611200612166565b610ccf61258c565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d5265676973747279000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261126890614419565b630100080160dd1b6112786118f7565b61128061187f565b611288612603565b610ccf612166565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106112c6576112c661443d565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015261137091015b60405160208183030381529060405261133890614419565b8260008560405160200161135391151560f81b815260010190565b60408051601f19818403018152919052630101000160d81b61267a565b505050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106113ab576113ab61443d565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526113709061141790614419565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e1401001400000000000000000000000000000000000000000000000000000061267a565b60408051600280825260608201835260009260208301908036833701905050905083816000815181106114b8576114b861443d565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106114f1576114f161443d565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f75726365416363657373000000000000000000000000000000000000603083015261154f9101611320565b50505050565b61137061156061022d565b6040516024810184905273ffffffffffffffffffffffffffffffffffffffff85166044820152600160648201526000907f00000000000000000000000000000000000000000000000000000000000000009060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3350b6a90000000000000000000000000000000000000000000000000000000017905261268f565b61137061161d61022d565b60007f00000000000000000000000000000000000000000000000000000000000000008585868051906020012060405160240161165c939291906144d3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f742d61180000000000000000000000000000000000000000000000000000000017905261268f565b60408051613a3160f11b60208201526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261171990614419565b7e6003022020200000000000000000000000000000000000000000000000000061174161187f565b6117496126bc565b61175161280b565b610ccf612882565b60408051613a3160f11b60208201526473746f726560d81b60228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015261050d91016040516020818303038152906040526117b990614419565b7c01000000000000000000000000000000000000000000000000000000006117df61187f565b6117e7612552565b6117ef61280b565b610ccf612a4a565b60408051613a3160f11b60208201526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261185790614419565b630101000160d81b61186761187f565b61186f611f6c565b611877612ac1565b610ccf612b38565b60408051600180825281830190925260009182919060208083019080368337019050509050605f816000815181106118b9576118b961443d565b602002602001019060c58111156118d2576118d261451e565b908160c58111156118e5576118e561451e565b9052506118f181612baf565b91505090565b604080516001808252818301909252600091829190602080830190803683370190505090506061816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816119485790505090506040518060400160405280600b81526020017f6e616d6573706163654964000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b602002602001018190525090565b604080516001808252818301909252606091816020015b60608152602001906001900390816119cd5790505090506040518060400160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6000611a37610bcb565b90503073ffffffffffffffffffffffffffffffffffffffff821603611a6957611a64878787878787612d73565b611af8565b6040517f0ba51f4900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690630ba51f4990611ac5908a908a908a908a908a908a9060040161458c565b600060405180830381600087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050505b50505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050601f816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611b525790505090506040518060400160405280600781526020017f62616c616e636500000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050604f81600081518110611bec57611bec61443d565b602002602001019060c5811115611c0557611c0561451e565b908160c5811115611c1857611c1861451e565b81525050605f816001815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611c475790505090506040518060400160405280600a81526020017f6d6f64756c654e616d650000000000000000000000000000000000000000000081525081600081518110611ca757611ca761443d565b60200260200101819052506040518060400160405280600d81526020017f617267756d656e74734861736800000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611d125790505090506040518060400160405280600d81526020017f6d6f64756c654164647265737300000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050606181600081518110611dac57611dac61443d565b602002602001019060c5811115611dc557611dc561451e565b908160c5811115611dd857611dd861451e565b815250506061816001815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611e075790505090506040518060400160405280600981526020017f64656c656761746f72000000000000000000000000000000000000000000000081525081600081518110611e6757611e6761443d565b60200260200101819052506040518060400160405280600981526020017f64656c6567617465650000000000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611ed25790505090506040518060400160405280601381526020017f64656c65676174696f6e436f6e74726f6c496400000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050605f81600081518110611dac57611dac61443d565b604080516001808252818301909252600091829190602080830190803683370190505090506060816000815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611fbc5790505090506040518060400160405280600a81526020017f7265736f757263654964000000000000000000000000000000000000000000008152508160008151811061201c5761201c61443d565b60200260200101819052506040518060400160405280600681526020017f63616c6c65720000000000000000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816120875790505090506040518060400160405280600681526020017f6163636573730000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516002808252606082018352600092839291906020830190803683370190505090506061816000815181106121215761212161443d565b602002602001019060c581111561213a5761213a61451e565b908160c581111561214d5761214d61451e565b815250506060816001815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b606081526020019060019003908161217d5790505090506040518060400160405280600881526020017f73797374656d4964000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160028082526060828101909352816020015b60608152602001906001900390816121f35790505090506040518060400160405280600681526020017f73797374656d0000000000000000000000000000000000000000000000000000815250816000815181106122535761225361443d565b60200260200101819052506040518060400160405280600c81526020017f7075626c69634163636573730000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252600091829190602080830190803683370190505090506043816000815181106118b9576118b961443d565b60408051600280825260608201835260009283929190602083019080368337019050509050605f8160008151811061231b5761231b61443d565b602002602001019060c58111156123345761233461451e565b908160c58111156123475761234761451e565b815250506043816001815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816123775790505090506040518060400160405280601081526020017f66756e6374696f6e53656c6563746f7200000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160028082526060828101909352816020015b60608152602001906001900390816123ed5790505090506040518060400160405280600881526020017f73797374656d49640000000000000000000000000000000000000000000000008152508160008151811061244d5761244d61443d565b60200260200101819052506040518060400160405280601681526020017f73797374656d46756e6374696f6e53656c6563746f7200000000000000000000815250816001815181106119a8576119a861443d565b6040805160018082528183019092526000918291906020808301908036833701905050905060c5816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816124f25790505090506040518060400160405280601181526020017f66756e6374696f6e5369676e6174757265000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160018082528183019092526000918291906020808301908036833701905050905060b6816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816125a35790505090506040518060400160405280600581526020017f76616c7565000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b606081526020019060019003908161261a5790505090506040518060400160405280600681526020017f73797374656d0000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b610bc48585612689848761304b565b8561308e565b60606000806126a087878787613322565b91509150816126b2576126b2816133a3565b9695505050505050565b60408051600580825260c082019092526000918291906020820160a080368337019050509050605f816000815181106126f7576126f761443d565b602002602001019060c58111156127105761271061451e565b908160c58111156127235761272361451e565b81525050605f8160018151811061273c5761273c61443d565b602002602001019060c58111156127555761275561451e565b908160c58111156127685761276861451e565b81525050605f816002815181106127815761278161443d565b602002602001019060c581111561279a5761279a61451e565b908160c58111156127ad576127ad61451e565b8152505060c4816003815181106127c6576127c661443d565b602002602001019060c58111156127df576127df61451e565b908160c58111156127f2576127f261451e565b8152505060c4816004815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816128225790505090506040518060400160405280600781526020017f7461626c65496400000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600580825260c08201909252606091816020015b606081526020019060019003908161289a5790505090506040518060400160405280600b81526020017f6669656c644c61796f7574000000000000000000000000000000000000000000815250816000815181106128fa576128fa61443d565b60200260200101819052506040518060400160405280600981526020017f6b6579536368656d6100000000000000000000000000000000000000000000008152508160018151811061294e5761294e61443d565b60200260200101819052506040518060400160405280600b81526020017f76616c7565536368656d61000000000000000000000000000000000000000000815250816002815181106129a2576129a261443d565b60200260200101819052506040518060400160405280601281526020017f616269456e636f6465644b65794e616d65730000000000000000000000000000815250816003815181106129f6576129f661443d565b60200260200101819052506040518060400160405280601481526020017f616269456e636f6465644669656c644e616d6573000000000000000000000000815250816004815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612a615790505090506040518060400160405280600581526020017f686f6f6b73000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612ad85790505090506040518060400160405280600a81526020017f7265736f75726365496400000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612b4f5790505090506040518060400160405280600681526020017f6578697374730000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6000601c82511115612be2578151604051635318beb960e01b8152600401612bd991815260200190565b60405180910390fd5b60008080805b8551811015612cbd576000612c26878381518110612c0857612c0861443d565b602002602001015160c5811115612c2157612c2161451e565b6133ab565b905080600003612c3b57600190920191612c73565b8215612c73576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80840193506008826004601f030302878381518110612c9457612c9461443d565b602002602001015160c5811115612cad57612cad61451e565b901b949094179350600101612be8565b506005811115612ce357604051635318beb960e01b815260048101829052602401612bd9565b84518190036008612cf6600260206145d6565b612d0091906145e9565b83901b939093179260086001612d18600260206145d6565b612d2291906145d6565b612d2c91906145e9565b81901b93909317926008600180612d45600260206145d6565b612d4f91906145d6565b612d5991906145d6565b612d6391906145e9565b9190911b92909217949350505050565b613a3160f11b867fffff0000000000000000000000000000000000000000000000000000000000001614801590612dd15750611bdd60f21b867fffff0000000000000000000000000000000000000000000000000000000000001614155b15612e3257613a3160f11b8687604051602001612df091815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252612bd9939291600401614600565b612e3b8561340b565b612e4684600161358c565b612e5183600061358c565b60e084901c60e885901c0160ff16825114612eb15760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b60e085901c60e886901c0160ff16815114612f115760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff1614612f895760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b612f9286613733565b15612fec578586604051602001612fab91815260200190565b60408051601f19818403018152908290527fdfaaf9cf000000000000000000000000000000000000000000000000000000008252612bd99291600401614641565b6130388686868686604051602001613004919061465a565b60405160208183030381529060405286604051602001613024919061465a565b6040516020818303038152906040526137ff565b613043866001611290565b505050505050565b600080805b8360ff168110156130865761307260ff601b83900360080287901c168361466d565b91508061307e81614469565b915050613050565b509392505050565b611bdd60f21b847fffff00000000000000000000000000000000000000000000000000000000000016036130fd57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8484846040516130f0939291906146bb565b60405180910390a261154f565b60006131098585613903565b9050600061311686613959565b905060005b81518110156131f55760008282815181106131385761313861443d565b602002602001015190506131646004826affffffffffffffffffffff1916613a2190919063ffffffff16565b156131e2576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d906131af908b908b908b908b906004016146ee565b600060405180830381600087803b1580156131c957600080fd5b505af11580156131dd573d6000803e3d6000fd5b505050505b50806131ed81614469565b91505061311b565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be86868660405161322a939291906146bb565b60405180910390a2613245828565ffffffffffff1685613a3f565b60005b8151811015611af85760008282815181106132655761326561443d565b602002602001015190506132916008826affffffffffffffffffffff1916613a2190919063ffffffff16565b1561330f576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba8721906132dc908b908b908b908b906004016146ee565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505b508061331a81614469565b915050613248565b600060608373ffffffffffffffffffffffffffffffffffffffff16613348848888613a55565b6040516133559190614732565b600060405180830381855af49150503d8060008114613390576040519150601f19603f3d011682016040523d82523d6000602084013e613395565b606091505b509097909650945050505050565b805160208201fd5b6000808260c58111156133c0576133c061451e565b60ff16905060618110156133da57601f1660010192915050565b60618360c58111156133ee576133ee61451e565b036133fc5750601492915050565b50600092915050565b50919050565b80613442576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344d82613a84565b90506005811115613494576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401612bd9565b600061349f83613ac1565b905060006134ad838361466d565b9050601c8111156134f4576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401612bd9565b60005b82811015610bc45760ff601b82900360080286901c166000819003613548576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020811115613583576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016134f7565b80158015613598575081155b156135b957604051635318beb960e01b815260006004820152602401612bd9565b60006135c483613a84565b905060058111156135eb57604051635318beb960e01b815260048101829052602401612bd9565b60006135f684613ac1565b90506000613604838361466d565b9050601c81111561362b57604051635318beb960e01b815260048101829052602401612bd9565b60008060005b838110156136ec5760006136596136488a84613ad3565b60c5811115612c2157612c2161451e565b11156136a357848110613698576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909201916136e4565b848110156136dd576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b600101613631565b5083821461371057604051635318beb960e01b815260048101839052602401612bd9565b848114611af857604051635318beb960e01b815260048101829052602401612bd9565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061376c5761376c61443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526000906137eb906137db90614419565b836000630101000160d81b613afb565b90506137f78160f81c90565b949350505050565b600061380c868686613b31565b9050600061381a8484613b53565b905060006138288585613b70565b604080516001808252818301909252919250600091906020808301908036833701905050905089816000815181106138625761386261443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526138f7906138ce90614419565b828686867e60030220202000000000000000000000000000000000000000000000000000613b9c565b50505050505050505050565b6000828260405160200161391892919061474e565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106139935761399361443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090613a0a90613a0290614419565b836000613ece565b90506137f7613a1c8260008451613f08565b613f98565b60008160ff1682613a328560581c90565b1660ff1614905092915050565b61137083838351613a508560200190565b613fa9565b6060838383604051602001613a6c93929190614789565b60405160208183030381529060405290509392505050565b60006008600180613a97600260206145d6565b613aa191906145d6565b613aab91906145d6565b613ab591906145e9565b8260ff911c1692915050565b600060086001613aa1600260206145d6565b6000601b8290036008028360ff911c1660c5811115613af457613af461451e565b9392505050565b6000613b28613b0a8686613903565b60ff858116601b0360080285901c16613b23858761304b565b614069565b95945050505050565b6040805160208101859052908101839052606081810183905290608001613a6c565b8151815160009181810160389190911b1760609190911b17613af4565b60608282604051602001613b859291906147db565b604051602081830303815290604052905092915050565b611bdd60f21b867fffff0000000000000000000000000000000000000000000000000000000000001603613c0d57857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a986868686604051613c00949392919061480a565b60405180910390a2613043565b6000613c1887613959565b905060005b8151811015613cfb576000828281518110613c3a57613c3a61443d565b60200260200101519050613c666001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613ce8576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90613cb5908c908c908c908c908c908c90600401614849565b600060405180830381600087803b158015613ccf57600080fd5b505af1158015613ce3573d6000803e3d6000fd5b505050505b5080613cf381614469565b915050613c1d565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051613d32949392919061480a565b60405180910390a26000613d468888613903565b90506000602087019050613d5e826000895184613fa9565b6000613d6985613a84565b1115613ded576000613d7b8a8a6140ba565b878155905060208601915060008060005b613d9588613a84565b8160ff161015613de857613daa8d8d83614110565b9250613dc58a8260ff166028026038011c64ffffffffff1690565b9150613dd48360008488613fa9565b613dde828661466d565b9450600101613d8c565b505050505b60005b83518110156138f7576000848281518110613e0d57613e0d61443d565b60200260200101519050613e396002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613ebb576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90613e88908e908e908e908e908e908e90600401614849565b600060405180830381600087803b158015613ea257600080fd5b505af1158015613eb6573d6000803e3d6000fd5b505050505b5080613ec681614469565b915050613df0565b60606137f7613ede858585614110565b6000613f0385613eee8989614190565b9060ff166028026038011c64ffffffffff1690565b6141a3565b6000818311158015613f1b575083518211155b613f57578383836040517f23230fa3000000000000000000000000000000000000000000000000000000008152600401612bd9939291906148a2565b60208401613f65848261466d565b90506000613f7385856145d6565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000613af483601560006141c6565b82156140235760208310613fd357602083048401935060208381613fcf57613fcf6148c7565b0692505b82156140235760208390036000600019600885021c1990506008850281811c91508351811c905081198754168282161787555081841161401457505061154f565b50600194909401939182900391015b5b602082106140455780518455600190930192601f1990910190602001614024565b811561154f576000600019600884021c198554835182169119161785555050505050565b60006020821061408f5760208204840193506020828161408b5761408b6148c7565b0691505b508254600882021b602082900380841115613086576001850154600882021c82179150509392505050565b600082826040516020016140cf92919061474e565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000838360405160200161412592919061474e565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b6000613af461419f84846140ba565b5490565b60405160208101601f19603f848401011660405282825261308685858584614241565b606060006141d48560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816141fa576141fa6148c7565b04905060405193506020840160208202810160405281855260005b82811015614235578451871c825293870193602090910190600101614215565b50505050509392505050565b82156142ca576020831061426b57602083048401935060208381614267576142676148c7565b0692505b82156142ca57602083900360008184101561428f5750600019600884021c1961429a565b50600019600882021c195b8554600886021b8119845116828216178452508184116142bb57505061154f565b50600194909401939182900391015b5b602082106142ec5783548152600190930192601f19909101906020016142cb565b811561154f576000600019600884021c198251865482169119161782525050505050565b60006020828403121561432257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613af457600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561437a57600080fd5b813567ffffffffffffffff8082111561439257600080fd5b818401915084601f8301126143a657600080fd5b8135818111156143b8576143b8614352565b604051601f8201601f19908116603f011681019083821181831017156143e0576143e0614352565b816040528281528760208487010111156143f957600080fd5b826020860160208301376000928101602001929092525095945050505050565b805160208083015191908110156134055760001960209190910360031b1b16919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361447c5761447c614453565b5060010190565b60005b8381101561449e578181015183820152602001614486565b50506000910152565b600081518084526144bf816020860160208601614483565b601f01601f19169290920160200192915050565b8381526060602082015260006144ec60608301856144a7565b90507fffffffff0000000000000000000000000000000000000000000000000000000083166040830152949350505050565b634e487b7160e01b600052602160045260246000fd5b600082825180855260208086019550808260051b84010181860160005b8481101561457f57601f1986840301895261456d8383516144a7565b98840198925090830190600101614551565b5090979650505050505050565b86815285602082015284604082015283606082015260c0608082015260006145b760c0830185614534565b82810360a08401526145c98185614534565b9998505050505050505050565b8181038181111561022757610227614453565b808202811582820484141761022757610227614453565b7fffff00000000000000000000000000000000000000000000000000000000000084168152826020820152606060408201526000613b2860608301846144a7565b8281526040602082015260006137f760408301846144a7565b602081526000613af46020830184614534565b8082018082111561022757610227614453565b600081518084526020808501945080840160005b838110156146b057815187529582019590820190600101614694565b509495945050505050565b6060815260006146ce6060830186614680565b65ffffffffffff8516602084015282810360408401526126b281856144a7565b8481526080602082015260006147076080830186614680565b65ffffffffffff85166040840152828103606084015261472781856144a7565b979650505050505050565b60008251614744818460208701614483565b9190910192915050565b82815260006020808301845182860160005b8281101561477c57815184529284019290840190600101614760565b5091979650505050505050565b6000845161479b818460208901614483565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600083516147ed818460208801614483565b835190830190614801818360208801614483565b01949350505050565b60808152600061481d6080830187614680565b828103602084015261482f81876144a7565b9050846040840152828103606084015261472781856144a7565b86815260c06020820152600061486260c0830188614680565b828103604084015261487481886144a7565b9050856060840152828103608084015261488e81866144a7565b9150508260a0830152979650505050505050565b6060815260006148b560608301866144a7565b60208301949094525060400152919050565b634e487b7160e01b600052601260045260246000fdfe756e726567697374657253746f7265486f6f6b28627974657333322c616464726573732972656769737465725461626c6528627974657333322c627974657333322c627974657333322c627974657333322c737472696e675b5d2c737472696e675b5d29726567697374657244656c65676174696f6e28616464726573732c627974657333322c627974657329726567697374657246756e6374696f6e53656c6563746f7228627974657333322c737472696e6729726567697374657253797374656d28627974657333322c616464726573732c626f6f6c297472616e7366657242616c616e6365546f4164647265737328627974657333322c616464726573732c75696e7432353629726567697374657253746f7265486f6f6b28627974657333322c616464726573732c75696e7438297265676973746572526f6f7446756e6374696f6e53656c6563746f7228627974657333322c737472696e672c62797465733429626174636843616c6c46726f6d2828616464726573732c627974657333322c6279746573295b5d29756e726567697374657253797374656d486f6f6b28627974657333322c616464726573732972656769737465724e616d65737061636544656c65676174696f6e28627974657333322c627974657333322c6279746573297472616e7366657242616c616e6365546f4e616d65737061636528627974657333322c627974657333322c75696e7432353629726567697374657253797374656d486f6f6b28627974657333322c616464726573732c75696e7438297472616e736665724f776e65727368697028627974657333322c6164647265737329a164736f6c6343000815000aa164736f6c6343000815000a","sourceMap":"1671:1949:198:-:0;;;1572:26:101;;;1594:4;-1:-1:-1;;1572:26:101;;;;;;;;3126:44:104;;;;;;;;;;;228:9:0;186:51;;1861:98:198;-1:-1:-1;;;;;;;;;1861:25:198;:98::i;:::-;1827:132;;1671:1949;;;;;;;;;;;;941:257:59;1028:10;1157:26;399:6;336:5:16;1157:26:59;:::i;:::-;-1:-1:-1;;;;;;1084:15:59;;-1:-1:-1;;;;;;;336:5:16;1103:31:59;;;;1084:51;-1:-1:-1;;;;;;1139:13:59;;:45;;;1084:101;;-1:-1:-1;941:257:59;;;;;:::o;14:222:203:-;79:9;;;100:10;;;97:133;;;152:10;147:3;143:20;140:1;133:31;187:4;184:1;177:15;215:4;212:1;205:15;97:133;14:222;;;;:::o;:::-;1671:1949:198;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806385226c8111610097578063d81bebb911610066578063d81bebb914610194578063e20c9f711461019c578063f60736ce146101a4578063fa7626d4146101ac57600080fd5b806385226c8114610157578063916a17c61461016c578063b5508aa914610174578063ba414fa61461017c57600080fd5b80633ae50144116100d35780633ae501441461012a5780633e5e3c23146101325780633f7286f41461013a57806366d9a9a01461014257600080fd5b806306e28a34146100fa5780630a9254e4146101045780631ed7831c1461010c575b600080fd5b6101026101b9565b005b610102610251565b610114610331565b604051610121919061164b565b60405180910390f35b610102610393565b610114610593565b6101146105f3565b61014a610653565b6040516101219190611698565b61015f610757565b60405161012191906117b3565b61014a610827565b61015f610922565b6101846109f2565b6040519015158152602001610121565b610102610b34565b610114610b3c565b610102610b9c565b6000546101849060ff1681565b6101c1610ba4565b602154604080517fd737d0c7000000000000000000000000000000000000000000000000000000008152905161024f926001600160a01b03169163d737d0c79160048083019260209291908290030181865afa158015610225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610249919061182a565b30610e1a565b565b60405161025d906115db565b604051809103906000f080158015610279573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216918217905563c4d66de86102be610f3a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561031757600080fd5b505af115801561032b573d6000803e3d6000fd5b50505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561038957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161036b575b5050505050905090565b61039b610ba4565b6040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c290608401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050507fe762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d60405161048d906020808252600b908201527f68656c6c6f20776f726c64000000000000000000000000000000000000000000604082015260600190565b60405180910390a16021546040517f319585fb00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f68656c6c6f20776f726c6400000000000000000000000000000000000000000060448201526000916001600160a01b03169063319585fb906064016000604051808303816000875af1158015610527573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261054f91908101906118f1565b9050610590816040518060400160405280600b81526020017f68656c6c6f20776f726c64000000000000000000000000000000000000000000815250611036565b50565b6060600f805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b6060600e805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b60606012805480602002602001604051908101604052809291908181526020016000905b8282101561074e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561073657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116106e35790505b50505050508152505081526020019060010190610677565b50505050905090565b60606011805480602002602001604051908101604052809291908181526020016000905b8282101561074e57838290600052602060002001805461079a90611942565b80601f01602080910402602001604051908101604052809291908181526020018280546107c690611942565b80156108135780601f106107e857610100808354040283529160200191610813565b820191906000526020600020905b8154815290600101906020018083116107f657829003601f168201915b50505050508152602001906001019061077b565b60606013805480602002602001604051908101604052809291908181526020016000905b8282101561074e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561090a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116108b75790505b5050505050815250508152602001906001019061084b565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101561074e57838290600052602060002001805461096590611942565b80601f016020809104026020016040519081016040528092919081815260200182805461099190611942565b80156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050505081526020019060010190610946565b60008054610100900460ff1615610a125750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b2f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610ab7917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611995565b60408051601f1981840301815290829052610ad1916119dd565b6000604051808303816000865af19150503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5091505080806020019051810190610b2b91906119f9565b9150505b919050565b6101c161117c565b6060600c805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b61039b61117c565b601f546040516001600160a01b039091169063af068c9e90610bc5906115e9565b604051809103906000f080158015610be1573d6000803e3d6000fd5b50604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16909152610c2a919060248101611a1b565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b5050601f546020546001600160a01b03909116925063b29e40899150610cbd907dffffffffffffffffffffffffffff00000000000000000000000000000000167f6e730000000000000000000000000000000000000000000000000000000000001790565b6040518263ffffffff1660e01b8152600401610cdb91815260200190565b600060405180830381600087803b158015610cf557600080fd5b505af1158015610d09573d6000803e3d6000fd5b505050506000604051610d1b906115f7565b604051809103906000f080158015610d37573d6000803e3d6000fd5b50601f546020546040517f3350b6a900000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03808416602483015260016044830152929350911690633350b6a990606401600060405180830381600087803b158015610dac57600080fd5b505af1158015610dc0573d6000803e3d6000fd5b5050601f54602054610ddf93506001600160a01b03909116915061119d565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b806001600160a01b0316826001600160a01b031614610f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610eb89060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051610eef9190611a3d565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051610f269190611a91565b60405180910390a1610f3661149b565b5050565b6000604051610f4890611605565b604051809103906000f080158015610f64573d6000803e3d6000fd5b50604051610f7190611613565b604051809103906000f080158015610f8d573d6000803e3d6000fd5b50604051610f9a90611621565b604051809103906000f080158015610fb6573d6000803e3d6000fd5b50604051610fc39061162f565b604051809103906000f080158015610fdf573d6000803e3d6000fd5b50604051610fec9061163d565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015611030573d6000803e3d6000fd5b50905090565b8060405160200161104791906119dd565b604051602081830303815290604052805190602001208260405160200161106e91906119dd565b6040516020818303038152906040528051906020012014610f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405161110e9060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583826040516111459190611ace565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051610f269190611b1d565b601f546040516001600160a01b0390911690638da798da90610bc5906115e9565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526000916001600160a01b03851691633ae7af08910160405160208183030381529060405261124090611b5a565b6040516024810186905260440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb9eb8bfb00000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526112dd929190600401611b9c565b6000604051808303816000875af11580156112fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261132491908101906118f1565b806020019051810190611337919061182a565b90506001600160a01b03831663bfdfaff77f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff00000000000000000000000000000000851617604080517f737900000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201520160405160208183030381529060405261141a90611b5a565b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1690915261146392919060248101611bb5565b600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050505092915050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115ad5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f198184030181529082905261154c9291602001611995565b60408051601f1981840301815290829052611566916119dd565b6000604051808303816000865af19150503d80600081146115a3576040519150601f19603f3d011682016040523d82523d6000602084013e6115a8565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61553a8062001bde83390190565b615a5d806200711883390190565b610a97806200cb7583390190565b611a79806200d60c83390190565b6118cc806200f08583390190565b610b15806201095183390190565b61567c806201146683390190565b614c6d8062016ae283390190565b6020808252825182820181905260009190848201906040850190845b8181101561168c5783516001600160a01b031683529284019291840191600101611667565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561175457898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b8083101561173f5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b01906116fd565b50978a019795505050918701916001016116c0565b50919998505050505050505050565b60005b8381101561177e578181015183820152602001611766565b50506000910152565b6000815180845261179f816020860160208601611763565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180857603f198886030184526117f6858351611787565b945092850192908501906001016117da565b5092979650505050505050565b6001600160a01b038116811461059057600080fd5b60006020828403121561183c57600080fd5b815161184781611815565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156118985761189861184e565b604051601f8501601f19908116603f011681019082821181831017156118c0576118c061184e565b816040528093508581528686860111156118d957600080fd5b6118e7866020830187611763565b5050509392505050565b60006020828403121561190357600080fd5b815167ffffffffffffffff81111561191a57600080fd5b8201601f8101841361192b57600080fd5b61193a8482516020840161187d565b949350505050565b600181811c9082168061195657607f821691505b60208210810361198f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516119cf816004850160208701611763565b919091016004019392505050565b600082516119ef818460208701611763565b9190910192915050565b600060208284031215611a0b57600080fd5b8151801515811461184757600080fd5b6001600160a01b038316815260406020820152600061193a6040830184611787565b604081526000611a7a60408301600a81527f2020202020204c65667400000000000000000000000000000000000000000000602082015260400190565b90506001600160a01b038316602083015292915050565b604081526000611a7a60408301600a81527f2020202020526967687400000000000000000000000000000000000000000000602082015260400190565b604081526000611b0b60408301600a81527f2020202020204c65667400000000000000000000000000000000000000000000602082015260400190565b828103602084015261193a8185611787565b604081526000611b0b60408301600a81527f2020202020526967687400000000000000000000000000000000000000000000602082015260400190565b8051602080830151919081101561198f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b82815260406020820152600061193a6040830184611787565b838152826020820152606060408201526000611bd46060830184611787565b9594505050505056fe60a060405234801561001057600080fd5b506100477f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e17580546001600160a01b03191630179055565b6040516e0c4b8c0b8c0b5d5b985d591a5d1959608a1b907fc7f5fdc8526b76f54916701bc910876243ffff2a40b0bb8d59eea8151c52c00590600090a2336080526040516e0c4b8c0b8c0b5d5b985d591a5d1959608a1b907f7f8f36afe3fb61c459c1a54a60b8a477eab02cc58e49f547561a40906239cb8290600090a2608051615452620000e86000396000818161036f015261139601526154526000f3fe6080604052600436106101d15760003560e01c80638c364d59116100f7578063c4d66de811610095578063d9c03a0411610064578063d9c03a04146106d1578063dbbf0e21146105d1578063e228a4a3146106f1578063ef6ea8621461071157610266565b8063c4d66de814610651578063cc49db7e14610671578063d03edb8c14610691578063d4285dc2146106b157610266565b8063af068c9e116100d1578063af068c9e146105f1578063b047c1eb14610611578063c0a2895a14610631578063c11222291461054b57610266565b80638c364d59146105915780639f1fcf0a146105b1578063a53417ed146105d157610266565b8063390baae01161016f5780634dc77d971161013e5780634dc77d971461050b578063505a181d1461052b5780636951955d1461054b578063894ecc581461057e57610266565b8063390baae01461047b5780633a77c2c21461049b5780633ae7af08146104c9578063419b58fd146104dc57610266565b8063150f3262116101ab578063150f3262146103fb5780631e7889771461041b578063298314fb1461043b5780633708196e1461045b57610266565b806302d05d3f1461035d57806305242d2f146103ae578063114a7266146103db57610266565b366102665760408051616e7360f01b6020820152600060228201819052603082018190529161021891016040516020818303038152906040526102139061459d565b610731565b60408051616e7360f01b6020820152600060228201819052603082015291925061026491016040516020818303038152906040526102559061459d565b61025f34846145da565b61080f565b005b303303610299576040516327a1460b60e21b81526001600160e01b03196000351660048201526024015b60405180910390fd5b6000806102b16000356001600160e01b031916610901565b91509150816000801b036102ff576040517ffdde54e20000000000000000000000000000000000000000000000000000000081526001600160e01b0319600035166004820152602401610290565b60006103436000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250869150610a119050565b9050600061035333858434610a44565b9050805160208201f35b34801561036957600080fd5b506103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103ba57600080fd5b506103ce6103c936600461464a565b610a71565b6040516103a59190614700565b3480156103e757600080fd5b506102646103f6366004614755565b610ab4565b34801561040757600080fd5b50610264610416366004614755565b610b67565b34801561042757600080fd5b506103ce6104363660046147e2565b610c12565b34801561044757600080fd5b50610264610456366004614840565b610c5c565b34801561046757600080fd5b506102646104763660046148ed565b610d45565b34801561048757600080fd5b506102646104963660046148ed565b610dfb565b3480156104a757600080fd5b506104bb6104b6366004614983565b610ea8565b6040519081526020016103a5565b6103ce6104d7366004614a53565b610eb9565b3480156104e857600080fd5b506104fc6104f7366004614a9a565b610ef5565b6040516103a593929190614aed565b34801561051757600080fd5b506103ce610526366004614b8d565b610f4a565b34801561053757600080fd5b50610264610546366004614bf6565b610f59565b34801561055757600080fd5b507f312e302e302d756e6175646974656400000000000000000000000000000000006104bb565b6103ce61058c366004614c57565b610fce565b34801561059d57600080fd5b506104bb6105ac36600461464a565b61112a565b3480156105bd57600080fd5b506104bb6105cc366004614cb0565b61116d565b3480156105dd57600080fd5b506104bb6105ec366004614d0f565b61117b565b3480156105fd57600080fd5b5061026461060c366004614d66565b611188565b34801561061d57600080fd5b5061026461062c366004614da0565b611204565b34801561063d57600080fd5b5061026461064c366004614e2f565b6112af565b34801561065d57600080fd5b5061026461066c366004614ebc565b61135d565b34801561067d57600080fd5b506104fc61068c366004614bf6565b6114d8565b34801561069d57600080fd5b506103ce6106ac3660046147e2565b61152a565b3480156106bd57600080fd5b506104bb6106cc366004614983565b61156b565b3480156106dd57600080fd5b506102646106ec36600461464a565b611576565b3480156106fd57600080fd5b506104bb61070c366004614983565b6115f6565b34801561071d57600080fd5b5061026461072c366004614755565b611601565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061076a5761076a614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e636573000000000000000000000000000000000000000000000000603083015260009161080791015b6040516020818303038152906040526107df9061459d565b8360007e200100200000000000000000000000000000000000000000000000000000006116ac565b949350505050565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061084557610845614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015281518082039093018352810190526108fc906108b19061459d565b826000856040516020016108c791815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006116d9565b505050565b6040805160018082528183019092526000918291829160208083019080368337019050509050837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061095a5761095a614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f720000000000000000000000000000000060308201528151808203909301835281019052600090819081906109f3906109cd9061459d565b857e240200200400000000000000000000000000000000000000000000000000006116ee565b925092509250610a048383836117f6565b9550955050505050915091565b82820160200180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682179052825b9392505050565b6060600080610a558787878761180e565b9150915081610a6757610a67816119f2565b9695505050505050565b6060610a67868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791506119fa9050565b303303610ae2576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610aec8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611a8b92505050565b505050505050565b303303610b95576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610b9f8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611aa692505050565b6060610c5385858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250611ae1915050565b95945050505050565b303303610c8a576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610c948833611a3f565b610d3b8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250611b1b92505050565b5050505050505050565b303303610d73576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610d7d8733611a3f565b610df28787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250889250611b31915050565b50505050505050565b303303610e29576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610e338733611a3f565b610df28787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152508892506116d9915050565b6000610eb382611b74565b92915050565b6060303303610ee9576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610a3d33848434610a44565b606060006060610f3a878787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506116ee915050565b9250925092509450945094915050565b6060610a678686868686611c44565b303303610f87576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610f918333611a3f565b6108fc83838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611d0592505050565b6060303303610ffe576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b336001600160a01b038516036110215761101a33848434610a44565b9050610a3d565b600061102d8533611d18565b905061103c8186338787611dea565b156110555761104d85858534610a44565b915050610a3d565b6000611062866000611d18565b90506110718187338888611dea565b1561108b5761108286868634610a44565b92505050610a3d565b60006110bd616e7360f01b7dffffffffffffffffffffffffffff00000000000000000000000000000000881617611ebf565b90506110cc8188338989611dea565b156110e7576110dd87878734610a44565b9350505050610a3d565b6040517fc86745f90000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152336024820152604401610290565b6000610a67868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791506116ac9050565b6000610c5385858585611f59565b6000610807848484611fa1565b3033036111b6576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b60408051616e7360f01b602082015260006022820181905260308201526111f691016040516020818303038152906040526111f09061459d565b33611fb7565b6112008282612008565b5050565b303303611232576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b61123c8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061211a92505050565b3033036112dd576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6112e78833611a3f565b610d3b8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528b93508a9250899189908990819084018382808284376000920191909152506123c992505050565b30330361138b576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461142f5760408051616e7360f01b602082015260006022820181905260308201526113fa91016040516020818303038152906040526113f59061459d565b6123e1565b336040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610290929190614eef565b600061147b7f636f7265000000000000000000000000000000000000000000000000000000007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061250f565b6001600160a01b0316146114bb576040517f15e34a4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008152602081019091526114d5908290612008565b50565b60606000606061151b8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061262492505050565b92509250925093509350939050565b6060610c538585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525087925061264a915050565b6000610eb382612660565b3033036115a4576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6115ae8533611a3f565b6115ef858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792508691506126d49050565b5050505050565b6000610eb38261272d565b30330361162f576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6116398633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061275392505050565b6000610c536116bb868661278e565b60ff858116601b0360080285901c166116d485876127e4565b612827565b6115ef85856116e884876127e4565b8561211a565b60606000606060006116ff85612878565b905061170c87878361289b565b93506000611719866128d4565b905080156117eb5761172b8888612911565b935066ffffffffffffff841667ffffffffffffffff81111561174f5761174f61499c565b6040519080825280601f01601f191660200182016040528015611779576020820181803683370190505b5092506020830160005b828160ff1610156117e857600061179b8b8b84612924565b905060006117b8888460ff166028026038011c64ffffffffff1690565b90506117c782600083876129a4565b6117d181856145da565b9350505080806117e090614f1a565b915050611783565b50505b505093509350939050565b60008061180285612a73565b90969095509350505050565b60006060600061181d86612a88565b905060005b81518110156118fa57600082828151811061183f5761183f614ed9565b6020026020010151905061186b6001826affffffffffffffffffffff1916612b5690919063ffffffff16565b156118e7576040517fc3323031000000000000000000000000000000000000000000000000000000008152606082901c9063c3323031906118b4908c908c908c90600401614f39565b600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505050505b50806118f281614f61565b915050611822565b5061190787858888612b74565b909350915060005b81518110156119e757600082828151811061192c5761192c614ed9565b602002602001015190506119586002826affffffffffffffffffffff1916612b5690919063ffffffff16565b156119d4576040517f973d8f99000000000000000000000000000000000000000000000000000000008152606082901c9063973d8f99906119a1908c908c908c90600401614f39565b600060405180830381600087803b1580156119bb57600080fd5b505af11580156119cf573d6000803e3d6000fd5b505050505b50806119df81614f61565b91505061190f565b505094509492505050565b805160208201fd5b6060611a0582612c8f565b8360ff161015611a2257611a1b85858585612ca1565b9050610807565b611a1b8585611a3085612c8f565b611a3a9087614f7b565b611ae1565b611a498282612cce565b61120057611a56826123e1565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610290929190614eef565b611aa084848484611a9b89611b74565b611b31565b50505050565b6000611ab28585612911565b90506000611acf828560ff166028026038011c64ffffffffff1690565b9050610b5f8686868460008888612d11565b6060610807611af1858585612924565b6000611b1685611b018989612911565b9060ff166028026038011c64ffffffffff1690565b613127565b6115ef8585858585611b2c8b611b74565b61314a565b611b3a81612c8f565b8360ff161015611b5657611b5185858585856116d9565b6115ef565b6115ef8585611b6484612c8f565b611b6e9087614f7b565b85612753565b60408051613a3160f11b60208201526473746f726560d81b6022820152655461626c657360d01b603082015260009101604051602081830303815290604052611bbc9061459d565b8203611be857507e60030220202000000000000000000000000000000000000000000000000000919050565b60408051613a3160f11b60208201526473746f726560d81b6022820152655461626c657360d01b6030820152610eb391611c3b9101604051602081830303815290604052611c359061459d565b846134a3565b60206000612827565b60606000611c528787612911565b90506000611c6f828760ff166028026038011c64ffffffffff1690565b90508085101580611c7f57508084115b15611cda578081861015611c9d57611c98600186614f94565b611c9f565b855b6040517f7e8578d300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610290565b6000611ce7898989612924565b9050611cf88187611b168189614f94565b9998505050505050505050565b6112008282611d1385611b74565b6134bf565b60408051600280825260608201835260009283929190602083019080368337019050509050836001600160a01b031660001b81600081518110611d5d57611d5d614ed9565b602002602001018181525050826001600160a01b031660001b81600181518110611d8957611d89614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5573657244656c65676174696f6e436f000000000000000000000000000000006030830152600091610c5391016107c7565b6000611df5866137d2565b15611e0257506001610c53565b85611e0f57506000610c53565b600080611e8b8660008a8a8989604051602401611e2e93929190614f39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1a86b55000000000000000000000000000000000000000000000000000000000179052612b74565b9150915081611e9f57600092505050610c53565b80806020019051810190611eb39190614fa7565b98975050505050505050565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611ef857611ef8614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d65737061636544656c6567617400000000000000000000000000000000603083015260009161080791016107c7565b600080611f6583612c8f565b90508060ff168460ff161015611f8d5760ff848116601b0360080284901c165b915050610807565b611f858686611f9c8488614f7b565b61384d565b6000610807848484611fb288611b74565b611f59565b6001600160a01b038116611ff1616e7360f01b7dffffffffffffffffffffffffffff0000000000000000000000000000000085161761385d565b6001600160a01b03161461120057611a56826123e1565b612032827f780ac2fc00000000000000000000000000000000000000000000000000000000613902565b6120a7336000848460405160240161204a9190614700565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7c5b03350000000000000000000000000000000000000000000000000000000017905261395d565b50611200826001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614fc9565b825160208401208461396e565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff00000000000000000000000000000000000000000000000000000000000016036121a457837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161219793929190615037565b60405180910390a2611aa0565b60006121b0858561278e565b905060006121bd86613aae565b905060005b815181101561229c5760008282815181106121df576121df614ed9565b6020026020010151905061220b6004826affffffffffffffffffffff1916612b5690919063ffffffff16565b15612289576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90612256908b908b908b908b9060040161506a565b600060405180830381600087803b15801561227057600080fd5b505af1158015612284573d6000803e3d6000fd5b505050505b508061229481614f61565b9150506121c2565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8686866040516122d193929190615037565b60405180910390a26122ec828565ffffffffffff1685613b49565b60005b8151811015610df257600082828151811061230c5761230c614ed9565b602002602001015190506123386008826affffffffffffffffffffff1916612b5690919063ffffffff16565b156123b6576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190612383908b908b908b908b9060040161506a565b600060405180830381600087803b15801561239d57600080fd5b505af11580156123b1573d6000803e3d6000fd5b505050505b50806123c181614f61565b9150506122ef565b610b5f8686868686866123dc8d8d612911565b612d11565b606081601081901b60006123f483613b5f565b9050827fffffffffffffffffffffffffffff00000000000000000000000000000000000083161561244f5761244a7fffffffffffffffffffffffffffff0000000000000000000000000000000000008416613b76565b612486565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6fffffffffffffffffffffffffffffffff198316156124ad576124a883613b76565b6124e4565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016124f6939291906150a3565b6040516020818303038152906040529350505050919050565b60408051600280825260608201835260009283929190602083019080368337019050509050836fffffffffffffffffffffffffffffffff19168160008151811061255b5761255b614ed9565b602002602001018181525050828160018151811061257b5761257b614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f496e7374616c6c65644d6f64756c657300000000000000000000000000000000603083015260009161261891015b6040516020818303038152906040526125f09061459d565b8360007e140100140000000000000000000000000000000000000000000000000000006116ac565b60601c95945050505050565b60606000606061263d858561263888611b74565b6116ee565b9250925092509250925092565b606061080784848461265b88611b74565b6119fa565b600061266b82613c06565b905061267682613cbf565b6126cf57818260405160200161268e91815260200190565b60408051601f19818403018152908290527f41e713ad0000000000000000000000000000000000000000000000000000000082526102909291600401615131565b919050565b60006126e08585612911565b905060006126fd828560ff166028026038011c64ffffffffff1690565b9050610b5f8686866127168764ffffffffff8716614f94565b604080516000815260208101909152889088612d11565b600061273882613da1565b9050806126cf57818260405160200161268e91815260200190565b600061275f8585612911565b9050600061277c828560ff166028026038011c64ffffffffff1690565b9050610b5f8686866000858888612d11565b600082826040516020016127a392919061514a565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561281f5761280b60ff601b83900360080287901c16836145da565b91508061281781614f61565b9150506127e9565b509392505050565b60006020821061284d5760208204840193506020828161284957612849615185565b0691505b508254600882021b60208290038084111561281f576001850154600882021c82179150509392505050565b6000600861288860026020614f94565b612892919061519b565b9190911c919050565b6060816000036128ba5750604080516020810190915260008152610a3d565b60006128c6858561278e565b9050610c5381600085613127565b600060086001806128e760026020614f94565b6128f19190614f94565b6128fb9190614f94565b612905919061519b565b8260ff911c1692915050565b6000610a3d6129208484613e5a565b5490565b6000838360405160200161293992919061514a565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b8215612a2d57602083106129ce576020830484019350602083816129ca576129ca615185565b0692505b8215612a2d5760208390036000818410156129f25750600019600884021c196129fd565b50600019600882021c195b8554600886021b811984511682821617845250818411612a1e575050611aa0565b50600194909401939182900391015b5b60208210612a4f5783548152600190930192601f1990910190602001612a2e565b8115611aa0576000600019600884021c198251865482169119161782525050505050565b602081015160408201516000905b9050915091565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612ac257612ac2614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b730000000000000000000000000000000000000000006030830152600091612b3f91015b604051602081830303815290604052612b379061459d565b836000611ae1565b9050610807612b518260008451613eb0565b613f40565b60008160ff1682612b678560581c90565b1660ff1614905092915050565b60006060600080612b8486613f51565b90925090506001600160a01b038216612bd55785612ba1876123e1565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610290929190615131565b80612be457612be48689611a3f565b8615612c30577dffffffffffffffffffffffffffff000000000000000000000000000000008616616e7360f01b176000612c1d82610731565b9050612c2d8261025f8b846145da565b50505b6000612c3c8760101b90565b7fffffffffffffffffffffffffffff0000000000000000000000000000000000001614612c7457612c6f88888488614035565b612c80565b612c80888884886140ad565b90999098509650505050505050565b6000600860016128f160026020614f94565b6060610c53612cb0868661278e565b612cba84866127e4565b60ff868116601b0360080286901c16613127565b6000612d01616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008516178361410e565b80610a3d5750610a3d838361410e565b613a3160f11b877fffff0000000000000000000000000000000000000000000000000000000000001614612d9b57613a3160f11b8788604051602001612d5991815260200190565b60408051601f19818403018152908290527f31b466830000000000000000000000000000000000000000000000000000000082526102909392916004016151b2565b6000612db6828760ff166028026038011c64ffffffffff1690565b9050600083518564ffffffffff1683612dcf9190614f94565b612dd991906145da565b9050808214158015612dfb575081612df186886151f3565b64ffffffffff1614155b15612e4b576040517fa65010b400000000000000000000000000000000000000000000000000000000815264ffffffffff8088166004830152808716602483015283166044820152606401610290565b818664ffffffffff161115612e9c576040517f7e8578d30000000000000000000000000000000000000000000000000000000081526004810183905264ffffffffff87166024820152604401610290565b6000612ea98489846141e0565b90506000612eb68b613aae565b905060005b8151811015612f8b576000828281518110612ed857612ed8614ed9565b60200260200101519050612f046010826affffffffffffffffffffff1916612b5690919063ffffffff16565b15612f7857606081901c6001600160a01b03166355eb5a288e8e8e8e8e8d8f6040518863ffffffff1660e01b8152600401612f459796959493929190615218565b600060405180830381600087803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b505050505b5080612f8381614f61565b915050612ebb565b5064ffffffffff881660005b8a60ff168160ff161015612fca57612fbe878260ff166028026038011c64ffffffffff1690565b90910190600101612f97565b508b7faa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b48c838b878c604051613003959493929190615276565b60405180910390a25082841461302457600061301f8c8c613e5a565b839055505b60006130318c8c8c612924565b9050613045818a64ffffffffff1689613b49565b5060005b815181101561311957600082828151811061306657613066614ed9565b602002602001015190506130926020826affffffffffffffffffffff1916612b5690919063ffffffff16565b1561310657606081901c6001600160a01b031663635845338e8e8e8e8e8a8f6040518863ffffffff1660e01b81526004016130d39796959493929190615218565b600060405180830381600087803b1580156130ed57600080fd5b505af1158015613101573d6000803e3d6000fd5b505050505b508061311181614f61565b915050613049565b505050505050505050505050565b60405160208101601f19603f848401011660405282825261281f858585846129a4565b7f6f74000000000000000000000000000000000000000000000000000000000000867fffff00000000000000000000000000000000000000000000000000000000000016036131d657857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9868686866040516131c994939291906152bc565b60405180910390a2610b5f565b60006131e187613aae565b905060005b81518110156132c457600082828151811061320357613203614ed9565b6020026020010151905061322f6001826affffffffffffffffffffff1916612b5690919063ffffffff16565b156132b1576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c9061327e908c908c908c908c908c908c906004016152fb565b600060405180830381600087803b15801561329857600080fd5b505af11580156132ac573d6000803e3d6000fd5b505050505b50806132bc81614f61565b9150506131e6565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9878787876040516132fb94939291906152bc565b60405180910390a2600061330f888861278e565b905060006020870190506133278260008951846142ae565b6000613332856128d4565b11156133b65760006133448a8a613e5a565b878155905060208601915060008060005b61335e886128d4565b8160ff1610156133b1576133738d8d83612924565b925061338e8a8260ff166028026038011c64ffffffffff1690565b915061339d83600084886142ae565b6133a782866145da565b9450600101613355565b505050505b60005b83518110156134975760008482815181106133d6576133d6614ed9565b602002602001015190506134026002826affffffffffffffffffffff1916612b5690919063ffffffff16565b15613484576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90613451908e908e908e908e908e908e906004016152fb565b600060405180830381600087803b15801561346b57600080fd5b505af115801561347f573d6000803e3d6000fd5b505050505b508061348f81614f61565b9150506133b9565b50505050505050505050565b60408051602081018490529081018290526000906060016127a3565b7f6f74000000000000000000000000000000000000000000000000000000000000837fffff000000000000000000000000000000000000000000000000000000000000160361354557827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d07836040516135389190615354565b60405180910390a2505050565b600061355084613aae565b905060005b815181101561362d57600082828151811061357257613572614ed9565b6020026020010151905061359e6040826affffffffffffffffffffff1916612b5690919063ffffffff16565b1561361a576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf45906135e790899089908990600401615367565b600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b505050505b508061362581614f61565b915050613555565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d078460405161365e9190615354565b60405180910390a26000613672858561278e565b90506136cb81600061368386612878565b67ffffffffffffffff81111561369b5761369b61499c565b6040519080825280601f01601f1916602001820160405280156136c5576020820181803683370190505b50613b49565b60006136d6846128d4565b11156136f75760006136e88686613e5a565b90506136f581602061436e565b505b60005b8251811015610b5f57600083828151811061371757613717614ed9565b602002602001015190506137436080826affffffffffffffffffffff1916612b5690919063ffffffff16565b156137bf576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b9061378c908a908a908a90600401615367565b600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050505b50806137ca81614f61565b9150506136fa565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201526000602282018190527f756e6c696d697465640000000000000000000000000000000000000000000000603083015291016040516020818303038152906040526138459061459d565b909114919050565b600061080782611b018686612911565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061389657613896614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d6573706163654f776e657200000000000000000000000000000000000060308301526000916138f791016125d8565b60601c949350505050565b61390c82826143ab565b611200576040517f74b5e6ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526001600160e01b031982166024820152604401610290565b6060600080610a55878787876140ad565b604080516002808252606082018352600092602083019080368337019050509050836fffffffffffffffffffffffffffffffff1916816000815181106139b6576139b6614ed9565b60200260200101818152505082816001815181106139d6576139d6614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f496e7374616c6c65644d6f64756c65730000000000000000000000000000000060308201528151808203909301835281019052611aa090613a429061459d565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006116d9565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613ae857613ae8614ed9565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b73000000000000000000000000000000000000000000006030830152600091612b3f9101612b1f565b6108fc83838351613b5a8560200190565b6142ae565b6000613b6d607060106145da565b9190911b919050565b606060005b6010811015613bd6576fffffffffffffffffffffffffffffffff198316600882021b7fff000000000000000000000000000000000000000000000000000000000000001615613bd65780613bce81614f61565b915050613b7b565b604080516fffffffffffffffffffffffffffffffff19851660208201528151603090910190915281815280610807565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613c3f57613c3f614ed9565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b6022820152655461626c657360d01b6030820152815180820390930183528101905260009061080790613c979061459d565b8360017e600302202020000000000000000000000000000000000000000000000000006116ac565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613cf857613cf8614ed9565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f757263654964730000000000000000000000000000000000000000006030830152600091613d9591015b604051602081830303815290604052613d6d9061459d565b8360007e010100010000000000000000000000000000000000000000000000000000006116ac565b90506108078160f81c90565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613dda57613dda614ed9565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b6022820152655461626c657360d01b6030820152815180820390930183528101905260009061080790613e329061459d565b8360027e600302202020000000000000000000000000000000000000000000000000006116ac565b60008282604051602001613e6f92919061514a565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000818311158015613ec3575083518211155b613eff578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161029093929190615390565b60208401613f0d84826145da565b90506000613f1b8585614f94565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000610a3d83601560006143c7565b60408051600180825281830190925260009182918291602080830190803683370190505090508381600081518110613f8b57613f8b614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000908190819061402490613ffe9061459d565b857e150200140100000000000000000000000000000000000000000000000000006116ee565b925092509250610a04838383614442565b60006060836001600160a01b0316600061405085898961444e565b60405161405d91906153b5565b60006040518083038185875af1925050503d806000811461409a576040519150601f19603f3d011682016040523d82523d6000602084013e61409f565b606091505b509097909650945050505050565b60006060836001600160a01b03166140c684888861444e565b6040516140d391906153b5565b600060405180830381855af49150503d806000811461409a576040519150601f19603f3d011682016040523d82523d6000602084013e61409f565b60408051600280825260608201835260009283929190602083019080368337019050509050838160008151811061414757614147614ed9565b602002602001018181525050826001600160a01b031660001b8160018151811061417357614173614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f7572636541636365737300000000000000000000000000000000000060308301526000916141d49101613d55565b9050610c538160f81c90565b600064ffffffffff821115614224576040517f4767058800000000000000000000000000000000000000000000000000000000815260048101839052602401610290565b8366ffffffffffffff811660ff851660280260380182901c64ffffffffff16808510614256578085038201915061425e565b848103820391505b5064ffffffffff6038602860ff8816020181811b197fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009490941690921792909216918416901b1790509392505050565b821561432857602083106142d8576020830484019350602083816142d4576142d4615185565b0692505b82156143285760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411614319575050611aa0565b50600194909401939182900391015b5b6020821061434a5780518455600190930192601f1990910190602001614329565b8115611aa0576000600019600884021c198554835182169119161785555050505050565b6000602061437d83601f6145da565b61438791906153d1565b61439190846145da565b90505b808310156108fc5760008355600183019250614394565b60006143b68361447d565b8015610a3d5750610a3d83836144c9565b606060006143d58560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816143fb576143fb615185565b04905060405193506020840160208202810160405281855260005b82811015614436578451871c825293870193602090910190600101614416565b50505050509392505050565b60008061180285614581565b6060838383604051602001614465939291906153f3565b60405160208183030381529060405290509392505050565b60006144a9827f01ffc9a7000000000000000000000000000000000000000000000000000000006144c9565b8015610eb357506144c2826001600160e01b03196144c9565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d9150600051905082801561456a575060208210155b80156145765750600081115b979650505050505050565b6020810151603482015160609190911c9060009060f81c612a81565b805160208083015191908110156145be576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610eb357610eb36145c4565b60008083601f8401126145ff57600080fd5b50813567ffffffffffffffff81111561461757600080fd5b6020830191508360208260051b850101111561463257600080fd5b9250929050565b803560ff811681146126cf57600080fd5b60008060008060006080868803121561466257600080fd5b85359450602086013567ffffffffffffffff81111561468057600080fd5b61468c888289016145ed565b909550935061469f905060408701614639565b949793965091946060013592915050565b60005b838110156146cb5781810151838201526020016146b3565b50506000910152565b600081518084526146ec8160208601602086016146b0565b601f01601f19169290920160200192915050565b602081526000610a3d60208301846146d4565b60008083601f84011261472557600080fd5b50813567ffffffffffffffff81111561473d57600080fd5b60208301915083602082850101111561463257600080fd5b6000806000806000806080878903121561476e57600080fd5b86359550602087013567ffffffffffffffff8082111561478d57600080fd5b6147998a838b016145ed565b90975095508591506147ad60408a01614639565b945060608901359150808211156147c357600080fd5b506147d089828a01614713565b979a9699509497509295939492505050565b600080600080606085870312156147f857600080fd5b84359350602085013567ffffffffffffffff81111561481657600080fd5b614822878288016145ed565b9094509250614835905060408601614639565b905092959194509250565b60008060008060008060008060a0898b03121561485c57600080fd5b88359750602089013567ffffffffffffffff8082111561487b57600080fd5b6148878c838d016145ed565b909950975060408b01359150808211156148a057600080fd5b6148ac8c838d01614713565b909750955060608b0135945060808b01359150808211156148cc57600080fd5b506148d98b828c01614713565b999c989b5096995094979396929594505050565b600080600080600080600060a0888a03121561490857600080fd5b87359650602088013567ffffffffffffffff8082111561492757600080fd5b6149338b838c016145ed565b909850965086915061494760408b01614639565b955060608a013591508082111561495d57600080fd5b5061496a8a828b01614713565b989b979a50959894979596608090950135949350505050565b60006020828403121561499557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156149db576149db61499c565b604052919050565b600082601f8301126149f457600080fd5b813567ffffffffffffffff811115614a0e57614a0e61499c565b614a216020601f19601f840116016149b2565b818152846020838601011115614a3657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614a6657600080fd5b82359150602083013567ffffffffffffffff811115614a8457600080fd5b614a90858286016149e3565b9150509250929050565b60008060008060608587031215614ab057600080fd5b84359350602085013567ffffffffffffffff811115614ace57600080fd5b614ada878288016145ed565b9598909750949560400135949350505050565b606081526000614b0060608301866146d4565b8460208401528281036040840152610a6781856146d4565b600082601f830112614b2957600080fd5b8135602067ffffffffffffffff821115614b4557614b4561499c565b8160051b614b548282016149b2565b9283528481018201928281019087851115614b6e57600080fd5b83870192505b8483101561457657823582529183019190830190614b74565b600080600080600060a08688031215614ba557600080fd5b85359450602086013567ffffffffffffffff811115614bc357600080fd5b614bcf88828901614b18565b945050614bde60408701614639565b94979396509394606081013594506080013592915050565b600080600060408486031215614c0b57600080fd5b83359250602084013567ffffffffffffffff811115614c2957600080fd5b614c35868287016145ed565b9497909650939450505050565b6001600160a01b03811681146114d557600080fd5b600080600060608486031215614c6c57600080fd5b8335614c7781614c42565b925060208401359150604084013567ffffffffffffffff811115614c9a57600080fd5b614ca6868287016149e3565b9150509250925092565b60008060008060808587031215614cc657600080fd5b84359350602085013567ffffffffffffffff811115614ce457600080fd5b614cf087828801614b18565b935050614cff60408601614639565b9396929550929360600135925050565b600080600060608486031215614d2457600080fd5b83359250602084013567ffffffffffffffff811115614d4257600080fd5b614d4e86828701614b18565b925050614d5d60408501614639565b90509250925092565b60008060408385031215614d7957600080fd5b8235614d8481614c42565b9150602083013567ffffffffffffffff811115614a8457600080fd5b60008060008060008060808789031215614db957600080fd5b86359550602087013567ffffffffffffffff80821115614dd857600080fd5b614de48a838b016145ed565b90975095506040890135915065ffffffffffff82168214614e0457600080fd5b909350606088013590808211156147c357600080fd5b803564ffffffffff811681146126cf57600080fd5b60008060008060008060008060c0898b031215614e4b57600080fd5b88359750602089013567ffffffffffffffff80821115614e6a57600080fd5b614e768c838d016145ed565b9099509750879150614e8a60408c01614639565b9650614e9860608c01614e1a565b9550614ea660808c01614e1a565b945060a08b01359150808211156148cc57600080fd5b600060208284031215614ece57600080fd5b8135610a3d81614c42565b634e487b7160e01b600052603260045260246000fd5b604081526000614f0260408301856146d4565b90506001600160a01b03831660208301529392505050565b600060ff821660ff8103614f3057614f306145c4565b60010192915050565b6001600160a01b0384168152826020820152606060408201526000610c5360608301846146d4565b60006000198203614f7457614f746145c4565b5060010190565b60ff8281168282160390811115610eb357610eb36145c4565b81810381811115610eb357610eb36145c4565b600060208284031215614fb957600080fd5b81518015158114610a3d57600080fd5b600060208284031215614fdb57600080fd5b81516fffffffffffffffffffffffffffffffff1981168114610a3d57600080fd5b600081518084526020808501945080840160005b8381101561502c57815187529582019590820190600101615010565b509495945050505050565b60608152600061504a6060830186614ffc565b65ffffffffffff851660208401528281036040840152610a6781856146d4565b8481526080602082015260006150836080830186614ffc565b65ffffffffffff85166040840152828103606084015261457681856146d4565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516151048160038601602089016146b0565b8084019050816003820152845191506151248260048301602088016146b0565b0160040195945050505050565b82815260406020820152600061080760408301846146d4565b82815260006020808301845182860160005b828110156151785781518452928401929084019060010161515c565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b8082028115828204841417610eb357610eb36145c4565b7fffff00000000000000000000000000000000000000000000000000000000000084168152826020820152606060408201526000610c5360608301846146d4565b64ffffffffff818116838216019080821115615211576152116145c4565b5092915050565b87815260e06020820152600061523160e0830189614ffc565b60ff8816604084015264ffffffffff87811660608501528616608084015260a0830185905282810360c084015261526881856146d4565b9a9950505050505050505050565b60a08152600061528960a0830188614ffc565b65ffffffffffff8716602084015264ffffffffff861660408401528460608401528281036080840152611eb381856146d4565b6080815260006152cf6080830187614ffc565b82810360208401526152e181876146d4565b9050846040840152828103606084015261457681856146d4565b86815260c06020820152600061531460c0830188614ffc565b828103604084015261532681886146d4565b9050856060840152828103608084015261534081866146d4565b9150508260a0830152979650505050505050565b602081526000610a3d6020830184614ffc565b8381526060602082015260006153806060830185614ffc565b9050826040830152949350505050565b6060815260006153a360608301866146d4565b60208301949094525060400152919050565b600082516153c78184602087016146b0565b9190910192915050565b6000826153ee57634e487b7160e01b600052601260045260246000fd5b500490565b600084516154058184602089016146b0565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815260148101919091526034019291505056fea164736f6c6343000815000a60c0604052604051620000129062000088565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b03166080526040516200004a9062000096565b604051809103906000f08015801562000067573d6000803e3d6000fd5b506001600160a01b031660a0523480156200008157600080fd5b50620000a4565b61087d8062002ad783390190565b612709806200335483390190565b60805160a0516129ff620000d8600039600081816103ed015261075c0152600081816104fa01526108b101526129ff6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806317d7de7c1161005b57806317d7de7c146100df57806345ec9354146100f65780637c5b033514610109578063e1af802c1461011c57600080fd5b806301ffc9a714610082578063119df25f146100aa57806313861fb5146100ca575b600080fd5b6100956100903660046124be565b610124565b60405190151581526020015b60405180910390f35b6100b2610209565b6040516001600160a01b0390911681526020016100a1565b6100dd6100d8366004612516565b610218565b005b604051651c1d5c1c195d60d21b81526020016100a1565b604051601f1936013581526020016100a1565b6100dd610117366004612516565b61055f565b6100b2610987565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780ac2fc0000000000000000000000000000000000000000000000000000000014806101b757507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b8061020357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000610213610991565b905090565b6000610222610987565b6040517f6e730000000000000000000000000000000000000000000000000000000000006020820152651c1d5c1c195d60d21b60228201529091506001600160a01b0382169063b29e408990603001604051602081830303815290604052610289906125c7565b6040518263ffffffff1660e01b81526004016102a791815260200190565b600060405180830381600087803b1580156102c157600080fd5b505af11580156102d5573d6000803e3d6000fd5b505060408051613a3160f11b6020820152651c1d5c1c195d60d21b60228201527f5075707065745265676973747279000000000000000000000000000000000000603082015261034193500190505b60405160208183030381529060405261033c906125c7565b6109c3565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526001600160a01b03831691633350b6a991016040516020818303038152906040526103af906125c7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260016044820152606401600060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b50506040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201526001600160a01b0385169350633350b6a99250016040516020818303038152906040526104bc906125c7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260016044820152606401600060405180830381600087803b15801561054357600080fd5b505af1158015610557573d6000803e3d6000fd5b505050505050565b6000610569610987565b6040517f6e730000000000000000000000000000000000000000000000000000000000006020820152651c1d5c1c195d60d21b602282015290915060009081906001600160a01b03841690819063b29e4089906030016040516020818303038152906040526105d7906125c7565b6040516024016105e991815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b939093179092529051610636925061260f565b600060405180830381855af49150503d8060008114610671576040519150601f19603f3d011682016040523d82523d6000602084013e610676565b606091505b5091509150816106895761068981610a0f565b60408051613a3160f11b6020820152651c1d5c1c195d60d21b60228201527f507570706574526567697374727900000000000000000000000000000000000060308201526106d79101610324565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526001600160a01b038516918291633350b6a99101604051602081830303815290604052610747906125c7565b60405160248101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660448201526001606482015260840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516107d8925061260f565b600060405180830381855af49150503d8060008114610813576040519150601f19603f3d011682016040523d82523d6000602084013e610818565b606091505b5090925090508161082c5761082c81610a0f565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201526001600160a01b038516918291633350b6a9910160405160208183030381529060405261089c906125c7565b60405160248101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660448201526001606482015260840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b93909317909252905161092d925061260f565b600060405180830381855af49150503d8060008114610968576040519150601f19603f3d011682016040523d82523d6000602084013e61096d565b606091505b509092509050816109815761098181610a0f565b50505050565b6000610213610a17565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806109c05750335b90565b610a0c817e140100140000000000000000000000000000000000000000000000000000006109ef610a56565b6109f7610ace565b6109ff610b08565b610a07610b8d565b610bed565b50565b805160208201fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e175546000906001600160a01b031680610a51573391505090565b919050565b60408051600180825281830190925260009182919060208083019080368337019050509050605f81600081518110610a9057610a9061262b565b602002602001019060c5811115610aa957610aa9612641565b908160c5811115610abc57610abc612641565b905250610ac881610ca7565b91505090565b60408051600180825281830190925260009182919060208083019080368337019050509050606181600081518110610a9057610a9061262b565b604080516001808252818301909252606091816020015b6060815260200190600190039081610b1f5790505090506040518060400160405280600881526020017f73797374656d496400000000000000000000000000000000000000000000000081525081600081518110610b7f57610b7f61262b565b602002602001018190525090565b604080516001808252818301909252606091816020015b6060815260200190600190039081610ba4579050509050604051806040016040528060068152602001651c1d5c1c195d60d21b81525081600081518110610b7f57610b7f61262b565b6000610bf7610a17565b9050306001600160a01b03821603610c1c57610c17878787878787610e6b565b610c9e565b6040517f0ba51f490000000000000000000000000000000000000000000000000000000081526001600160a01b03821690630ba51f4990610c6b908a908a908a908a908a908a906004016126d5565b600060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b505050505b50505050505050565b6000601c82511115610cda578151604051635318beb960e01b8152600401610cd191815260200190565b60405180910390fd5b60008080805b8551811015610db5576000610d1e878381518110610d0057610d0061262b565b602002602001015160c5811115610d1957610d19612641565b611156565b905080600003610d3357600190920191610d6b565b8215610d6b576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80840193506008826004601f030302878381518110610d8c57610d8c61262b565b602002602001015160c5811115610da557610da5612641565b901b949094179350600101610ce0565b506005811115610ddb57604051635318beb960e01b815260048101829052602401610cd1565b84518190036008610dee60026020612735565b610df89190612748565b83901b939093179260086001610e1060026020612735565b610e1a9190612735565b610e249190612748565b81901b93909317926008600180610e3d60026020612735565b610e479190612735565b610e519190612735565b610e5b9190612748565b9190911b92909217949350505050565b613a3160f11b867fffff0000000000000000000000000000000000000000000000000000000000001614801590610ee457507f6f74000000000000000000000000000000000000000000000000000000000000867fffff0000000000000000000000000000000000000000000000000000000000001614155b15610f4557613a3160f11b8687604051602001610f0391815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252610cd193929160040161275f565b610f4e856111b6565b610f5984600161133e565b610f6483600061133e565b60e084901c60e885901c0160ff16825114610fc45760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b60e085901c60e886901c0160ff168151146110245760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff161461109c5760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b6110a5866114e5565b156110ff5785866040516020016110be91815260200190565b60408051601f19818403018152908290527fdfaaf9cf000000000000000000000000000000000000000000000000000000008252610cd192916004016127a0565b61114b868686868660405160200161111791906127b9565b6040516020818303038152906040528660405160200161113791906127b9565b6040516020818303038152906040526115c9565b6105578660016116e9565b6000808260c581111561116b5761116b612641565b60ff169050606181101561118557601f1660010192915050565b60618360c581111561119957611199612641565b036111a75750601492915050565b50600092915050565b50919050565b806111ed576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111f8826117e0565b9050600581111561123f576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401610cd1565b600061124a8361181d565b9050600061125883836127cc565b9050601c81111561129f576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401610cd1565b60005b828110156113375760ff601b82900360080286901c1660008190036112f3576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081111561132e576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016112a2565b5050505050565b8015801561134a575081155b1561136b57604051635318beb960e01b815260006004820152602401610cd1565b6000611376836117e0565b9050600581111561139d57604051635318beb960e01b815260048101829052602401610cd1565b60006113a88461181d565b905060006113b683836127cc565b9050601c8111156113dd57604051635318beb960e01b815260048101829052602401610cd1565b60008060005b8381101561149e57600061140b6113fa8a8461182f565b60c5811115610d1957610d19612641565b11156114555784811061144a576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600190920191611496565b8481101561148f576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b6001016113e3565b508382146114c257604051635318beb960e01b815260048101839052602401610cd1565b848114610c9e57604051635318beb960e01b815260048101829052602401610cd1565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061151e5761151e61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526000906115b59061158d906125c7565b8360007e01010001000000000000000000000000000000000000000000000000000000611857565b90506115c18160f81c90565b949350505050565b604080516020810187905280820186905260608082018690528251808303909101815260809091019091526000611600848461188d565b9050600061160e85856118aa565b604080516001808252818301909252919250600091906020808301908036833701905050905089816000815181106116485761164861262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526116dd906116b4906125c7565b828686867e600302202020000000000000000000000000000000000000000000000000006118d6565b50505050505050505050565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061171f5761171f61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526117db9061178b906125c7565b826000856040516020016117a691151560f81b815260010190565b60408051601f198184030181529190527e01010001000000000000000000000000000000000000000000000000000000611c23565b505050565b600060086001806117f360026020612735565b6117fd9190612735565b6118079190612735565b6118119190612748565b8260ff911c1692915050565b6000600860016117fd60026020612735565b6000601b8290036008028360ff911c1660c581111561185057611850612641565b9392505050565b60006118846118668686611c38565b60ff858116601b0360080285901c1661187f8587611c8e565b611cd1565b95945050505050565b8151815160009181810160389190911b1760609190911b17611850565b606082826040516020016118bf9291906127df565b604051602081830303815290604052905092915050565b7f6f74000000000000000000000000000000000000000000000000000000000000867fffff000000000000000000000000000000000000000000000000000000000000160361196257857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9868686866040516119559493929190612849565b60405180910390a2610557565b600061196d87611d22565b905060005b8151811015611a5057600082828151811061198f5761198f61262b565b602002602001015190506119bb6001826affffffffffffffffffffff1916611dea90919063ffffffff16565b15611a3d576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90611a0a908c908c908c908c908c908c90600401612893565b600060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b505050505b5080611a48816128ec565b915050611972565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051611a879493929190612849565b60405180910390a26000611a9b8888611c38565b90506000602087019050611ab3826000895184611e08565b6000611abe856117e0565b1115611b42576000611ad08a8a611ec8565b878155905060208601915060008060005b611aea886117e0565b8160ff161015611b3d57611aff8d8d83611f1e565b9250611b1a8a8260ff166028026038011c64ffffffffff1690565b9150611b298360008488611e08565b611b3382866127cc565b9450600101611ae1565b505050505b60005b83518110156116dd576000848281518110611b6257611b6261262b565b60200260200101519050611b8e6002826affffffffffffffffffffff1916611dea90919063ffffffff16565b15611c10576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90611bdd908e908e908e908e908e908e90600401612893565b600060405180830381600087803b158015611bf757600080fd5b505af1158015611c0b573d6000803e3d6000fd5b505050505b5080611c1b816128ec565b915050611b45565b6113378585611c328487611c8e565b85611f9e565b60008282604051602001611c4d929190612906565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff16811015611cc957611cb560ff601b83900360080287901c16836127cc565b915080611cc1816128ec565b915050611c93565b509392505050565b600060208210611cf757602082048401935060208281611cf357611cf3612941565b0691505b508254600882021b602082900380841115611cc9576001850154600882021c82179150509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611d5c57611d5c61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090611dd390611dcb906125c7565b83600061224d565b90506115c1611de58260008451612287565b612317565b60008160ff1682611dfb8560581c90565b1660ff1614905092915050565b8215611e825760208310611e3257602083048401935060208381611e2e57611e2e612941565b0692505b8215611e825760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411611e73575050610981565b50600194909401939182900391015b5b60208210611ea45780518455600190930192601f1990910190602001611e83565b8115610981576000600019600884021c198554835182169119161785555050505050565b60008282604051602001611edd929190612906565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b60008383604051602001611f33929190612906565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff000000000000000000000000000000000000000000000000000000000000160361202857837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161201b93929190612957565b60405180910390a2610981565b60006120348585611c38565b9050600061204186611d22565b905060005b81518110156121205760008282815181106120635761206361262b565b6020026020010151905061208f6004826affffffffffffffffffffff1916611dea90919063ffffffff16565b1561210d576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d906120da908b908b908b908b90600401612994565b600060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b505050505b5080612118816128ec565b915050612046565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be86868660405161215593929190612957565b60405180910390a2612170828565ffffffffffff1685612328565b60005b8151811015610c9e5760008282815181106121905761219061262b565b602002602001015190506121bc6008826affffffffffffffffffffff1916611dea90919063ffffffff16565b1561223a576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190612207908b908b908b908b90600401612994565b600060405180830381600087803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b505050505b5080612245816128ec565b915050612173565b60606115c161225d858585611f1e565b60006122828561226d898961233e565b9060ff166028026038011c64ffffffffff1690565b612351565b600081831115801561229a575083518211155b6122d6578383836040517f23230fa3000000000000000000000000000000000000000000000000000000008152600401610cd1939291906129cd565b602084016122e484826127cc565b905060006122f28585612735565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006118508360156000612374565b6117db838383516123398560200190565b611e08565b600061185061234d8484611ec8565b5490565b60405160208101601f19603f8484010116604052828252611cc9858585846123ef565b606060006123828560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816123a8576123a8612941565b04905060405193506020840160208202810160405281855260005b828110156123e3578451871c8252938701936020909101906001016123c3565b50505050509392505050565b821561247857602083106124195760208304840193506020838161241557612415612941565b0692505b821561247857602083900360008184101561243d5750600019600884021c19612448565b50600019600882021c195b8554600886021b811984511682821617845250818411612469575050610981565b50600194909401939182900391015b5b6020821061249a5783548152600190930192601f1990910190602001612479565b8115610981576000600019600884021c198251865482169119161782525050505050565b6000602082840312156124d057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461185057600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561252857600080fd5b813567ffffffffffffffff8082111561254057600080fd5b818401915084601f83011261255457600080fd5b81358181111561256657612566612500565b604051601f8201601f19908116603f0116810190838211818310171561258e5761258e612500565b816040528281528760208487010111156125a757600080fd5b826020860160208301376000928101602001929092525095945050505050565b805160208083015191908110156111b05760001960209190910360031b1b16919050565b60005b838110156126065781810151838201526020016125ee565b50506000910152565b600082516126218184602087016125eb565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000815180845261266f8160208601602086016125eb565b601f01601f19169290920160200192915050565b6000815180845260208085019450848260051b860182860160005b858110156126c85783830389526126b6838351612657565b9885019892509084019060010161269e565b5090979650505050505050565b86815285602082015284604082015283606082015260c06080820152600061270060c0830185612683565b82810360a08401526127128185612683565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102035761020361271f565b80820281158282048414176102035761020361271f565b7fffff000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006118846060830184612657565b8281526040602082015260006115c16040830184612657565b6020815260006118506020830184612683565b808201808211156102035761020361271f565b600083516127f18184602088016125eb565b8351908301906128058183602088016125eb565b01949350505050565b600081518084526020808501945080840160005b8381101561283e57815187529582019590820190600101612822565b509495945050505050565b60808152600061285c608083018761280e565b828103602084015261286e8187612657565b905084604084015282810360608401526128888185612657565b979650505050505050565b86815260c0602082015260006128ac60c083018861280e565b82810360408401526128be8188612657565b905085606084015282810360808401526128d88186612657565b9150508260a0830152979650505050505050565b600060001982036128ff576128ff61271f565b5060010190565b82815260006020808301845182860160005b8281101561293457815184529284019290840190600101612918565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b60608152600061296a606083018661280e565b65ffffffffffff85166020840152828103604084015261298a8185612657565b9695505050505050565b8481526080602082015260006129ad608083018661280e565b65ffffffffffff8516604084015282810360608401526128888185612657565b6060815260006129e06060830186612657565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b5061085d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80631a86b550116100505780631a86b550146100c157806345ec9354146100d4578063e1af802c146100e757600080fd5b806301ffc9a71461006c578063119df25f14610094575b600080fd5b61007f61007a3660046105c6565b6100ef565b60405190151581526020015b60405180910390f35b61009c6101d4565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b61007f6100cf366004610625565b6101e3565b604051601f19360135815260200161008b565b61009c6102c2565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faf58547700000000000000000000000000000000000000000000000000000000148061018257507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b806101ce57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101de6102cc565b905090565b6000806101ee6101d4565b604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f5075707065745265676973747279000000000000000000000000000000000000603082015291925073ffffffffffffffffffffffffffffffffffffffff8316916102a2910160405160208183030381529060405261029c9061070b565b866102fe565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60006101de61037b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102fb5750335b90565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061033757610337610732565b6020908102919091010152600061036f8583837e140100140000000000000000000000000000000000000000000000000000006103c7565b60601c95945050505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff16806103c2573391505090565b919050565b6000806103d261037b565b90503073ffffffffffffffffffffffffffffffffffffffff821603610405576103fd868686866104a6565b91505061049e565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d599061045d908990899089908990600401610748565b602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fd91906107a3565b949350505050565b60006104d36104b586866104dc565b60ff858116601b0360080285901c166104ce8587610532565b610575565b95945050505050565b600082826040516020016104f19291906107bc565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561056d5761055960ff601b83900360080287901c168361080d565b91508061056581610820565b915050610537565b509392505050565b60006020821061059b576020820484019350602082816105975761059761083a565b0691505b508254600882021b60208290038084111561056d576001850154600882021c82179150509392505050565b6000602082840312156105d857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461060857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561063a57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461065e57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561068257600080fd5b818601915086601f83011261069657600080fd5b8135818111156106a8576106a861060f565b604051601f8201601f19908116603f011681019083821181831017156106d0576106d061060f565b816040528281528960208487010111156106e957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8051602080830151919081101561072c576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156107895784518352938301939183019160010161076d565b505060ff9690961660408501525050506060015292915050565b6000602082840312156107b557600080fd5b5051919050565b82815260006020808301845182860160005b828110156107ea578151845292840192908401906001016107ce565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101ce576101ce6107f7565b60006000198203610833576108336107f7565b5060010190565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000a608060405234801561001057600080fd5b506126e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806345ec93541161005057806345ec9354146100c1578063b9eb8bfb146100d4578063e1af802c146100e757600080fd5b806301ffc9a71461006c578063119df25f14610094575b600080fd5b61007f61007a366004611297565b6100ef565b60405190151581526020015b60405180910390f35b61009c610188565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b604051601f19360135815260200161008b565b61009c6100e23660046112d9565b610197565b61009c6102a0565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000148061018257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101926102aa565b905090565b60006101aa826101a5610188565b6102dc565b6101b26102a0565b826040516101bf9061128a565b73ffffffffffffffffffffffffffffffffffffffff90921682526020820152604001604051809103906000f0801580156101fd573d6000803e3d6000fd5b50604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f5075707065745265676973747279000000000000000000000000000000000000603082015291925061029b9101604051602081830303815290604052610294906112f2565b83836103a4565b919050565b6000610192610464565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102d95750335b90565b73ffffffffffffffffffffffffffffffffffffffff811661033e7f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff000000000000000000000000000000008516176104ab565b73ffffffffffffffffffffffffffffffffffffffff16146103a057610362826105b9565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610397929190611369565b60405180910390fd5b5050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106103da576103da6113a1565b60200260200101818152505061045e8482600085604051602001610429919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b60408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006106f6565b50505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff168061029b573391505090565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106104e4576104e46113a1565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906105ae90610586906112f2565b8360007e140100140000000000000000000000000000000000000000000000000000006107c6565b60601c949350505050565b606081601081901b60006105cc836108a5565b9050827fffffffffffffffffffffffffffff000000000000000000000000000000000000831615610627576106227fffffffffffffffffffffffffffff00000000000000000000000000000000000084166108bc565b61065e565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156106945761068f836108bc565b6106cb565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016106dd939291906113d0565b6040516020818303038152906040529350505050919050565b6000610700610464565b90503073ffffffffffffffffffffffffffffffffffffffff8216036107315761072c868686868661096a565b6107be565b6040517f390baae000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063390baae09061078b9089908990899089908990600401611499565b600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b505050505b505050505050565b6000806107d1610464565b90503073ffffffffffffffffffffffffffffffffffffffff821603610804576107fc86868686610986565b91505061089d565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d599061085c9089908990899089906004016114e0565b602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc919061150f565b949350505050565b60006108b360706010611557565b9190911b919050565b606060005b601081101561092b577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff00000000000000000000000000000000000000000000000000000000000000161561092b57806109238161156a565b9150506108c1565b604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166020820152815160309091019091528181528061089d565b61097f858561097984876109bc565b856109ff565b5050505050565b60006109b36109958686610cb7565b60ff858116601b0360080285901c166109ae85876109bc565b610d0d565b95945050505050565b600080805b8360ff168110156109f7576109e360ff601b83900360080287901c1683611557565b9150806109ef8161156a565b9150506109c1565b509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610a8957837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610a7c93929190611584565b60405180910390a261045e565b6000610a958585610cb7565b90506000610aa286610d5e565b905060005b8151811015610b81576000828281518110610ac457610ac46113a1565b60200260200101519050610af06004826affffffffffffffffffffff1916610e5990919063ffffffff16565b15610b6e576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610b3b908b908b908b908b906004016115c1565b600060405180830381600087803b158015610b5557600080fd5b505af1158015610b69573d6000803e3d6000fd5b505050505b5080610b798161156a565b915050610aa7565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610bb693929190611584565b60405180910390a2610bd1828565ffffffffffff1685610e77565b60005b8151811015610cae576000828281518110610bf157610bf16113a1565b60200260200101519050610c1d6008826affffffffffffffffffffff1916610e5990919063ffffffff16565b15610c9b576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610c68908b908b908b908b906004016115c1565b600060405180830381600087803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b505050505b5080610ca68161156a565b915050610bd4565b50505050505050565b60008282604051602001610ccc929190611605565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600060208210610d3357602082048401935060208281610d2f57610d2f611640565b0691505b508254600882021b6020829003808411156109f7576001850154600882021c82179150509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610d9857610d986113a1565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090610e4290610e3a906112f2565b836000610e92565b905061089d610e548260008451610ecc565b610f5c565b60008160ff1682610e6a8560581c90565b1660ff1614905092915050565b610e8d83838351610e888560200190565b610f74565b505050565b606061089d610ea2858585611034565b6000610ec785610eb289896110b4565b9060ff166028026038011c64ffffffffff1690565b6110c7565b6000818311158015610edf575083518211155b610f1b578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016103979392919061166f565b60208401610f298482611557565b90506000610f378585611694565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000610f6d83601560006110ea565b9392505050565b8215610fee5760208310610f9e57602083048401935060208381610f9a57610f9a611640565b0692505b8215610fee5760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411610fdf57505061045e565b50600194909401939182900391015b5b602082106110105780518455600190930192601f1990910190602001610fef565b811561045e576000600019600884021c198554835182169119161785555050505050565b60008383604051602001611049929190611605565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b6000610f6d6110c38484611165565b5490565b60405160208101601f19603f84840101166040528282526109f7858585846111bb565b606060006110f88560801c90565b90506fffffffffffffffffffffffffffffffff8516600085828161111e5761111e611640565b04905060405193506020840160208202810160405281855260005b82811015611159578451871c825293870193602090910190600101611139565b50505050509392505050565b6000828260405160200161117a929190611605565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b821561124457602083106111e5576020830484019350602083816111e1576111e1611640565b0692505b82156112445760208390036000818410156112095750600019600884021c19611214565b50600019600882021c195b8554600886021b81198451168282161784525081841161123557505061045e565b50600194909401939182900391015b5b602082106112665783548152600190930192601f1990910190602001611245565b811561045e576000600019600884021c198251865482169119161782525050505050565b611035806116a883390190565b6000602082840312156112a957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f6d57600080fd5b6000602082840312156112eb57600080fd5b5035919050565b80516020808301519190811015611313576000198160200360031b1b821691505b50919050565b60005b8381101561133457818101518382015260200161131c565b50506000910152565b60008151808452611355816020860160208601611319565b601f01601f19169290920160200192915050565b60408152600061137c604083018561133d565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a000000000000000000000000000000000000000000000000000000000000008060028401528451611431816003860160208901611319565b808401905081600382015284519150611451826004830160208801611319565b0160040195945050505050565b600081518084526020808501945080840160005b8381101561148e57815187529582019590820190600101611472565b509495945050505050565b85815260a0602082015260006114b260a083018761145e565b60ff8616604084015282810360608401526114cd818661133d565b9150508260808301529695505050505050565b8481526080602082015260006114f9608083018661145e565b60ff949094166040830152506060015292915050565b60006020828403121561152157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561018257610182611528565b6000600019820361157d5761157d611528565b5060010190565b606081526000611597606083018661145e565b65ffffffffffff8516602084015282810360408401526115b7818561133d565b9695505050505050565b8481526080602082015260006115da608083018661145e565b65ffffffffffff8516604084015282810360608401526115fa818561133d565b979650505050505050565b82815260006020808301845182860160005b8281101561163357815184529284019290840190600101611617565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b606081526000611682606083018661133d565b60208301949094525060400152919050565b818103818111156101825761018261152856fe60c060405234801561001057600080fd5b5060405161103538038061103583398101604081905261002f9161007c565b6001600160a01b038216608081905260a08290527f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e17580546001600160a01b031916909117905550506100b6565b6000806040838503121561008f57600080fd5b82516001600160a01b03811681146100a657600080fd5b6020939093015192949293505050565b60805160a051610f326101036000396000818160e1015281816101b401528181610239015281816102b70152818161032e01526103a101526000818160b201526101630152610f326000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063c9a34acd11610050578063c9a34acd146101f9578063d72a26651461020c578063e2ed58bd1461021f57610072565b806330b67baa1461015e57806339f898bc146101af57806366c93bdb146101e4575b6040517f894ecc5800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063894ecc589061010d9033907f00000000000000000000000000000000000000000000000000000000000000009086903690600401610a5c565b6000604051808303816000875af115801561012c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101549190810190610b88565b9050805160208201f35b6101857f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101d67f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101a6565b6101f76101f2366004610c16565b610232565b005b6101f7610207366004610c7a565b6102b0565b6101f761021a366004610cd4565b610327565b6101f761022d366004610d1b565b61039a565b600061025d7f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff82161461029d576040516398d49b0360e01b81523360048201526024015b60405180910390fd5b82848688855160208701a4505050505050565b60006102db7f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff821614610316576040516398d49b0360e01b8152336004820152602401610294565b828486845160208601a35050505050565b60006103527f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff82161461038d576040516398d49b0360e01b8152336004820152602401610294565b82825160208401a1505050565b60006103c57f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff821614610400576040516398d49b0360e01b8152336004820152602401610294565b8284835160208501a250505050565b6040805160018082528183019092526000918291829160208083019080368337019050509050838160008151811061044957610449610d6b565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f53797374656d73000000000000000000000000000000000000000000000000006030820152815180820390930183528101905260009081908190610515906104ef90610d81565b857e1502001401000000000000000000000000000000000000000000000000000061053a565b5050602081015160349091015160609190911c9860f89190911c975095505050505050565b606060006060600061054a610624565b90503073ffffffffffffffffffffffffffffffffffffffff82160361058057610574878787610670565b9350935093505061061b565b6040517f419b58fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063419b58fd906105d6908a908a908a90600401610da8565b600060405180830381865afa1580156105f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105749190810190610dff565b93509350939050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff168061066b573391505090565b919050565b606060006060600061068185610778565b905061068e87878361079b565b9350600061069b866107df565b9050801561076d576106ad888861081c565b935066ffffffffffffff841667ffffffffffffffff8111156106d1576106d1610aaf565b6040519080825280601f01601f1916602001820160405280156106fb576020820181803683370190505b5092506020830160005b828160ff16101561076a57600061071d8b8b84610838565b9050600061073a888460ff166028026038011c64ffffffffff1690565b905061074982600083876108b8565b6107538185610e78565b93505050808061076290610e8b565b915050610705565b50505b505093509350939050565b6000600861078860026020610eaa565b6107929190610ebd565b9190911c919050565b6060816000036107ba57506040805160208101909152600081526107d8565b60006107c68585610985565b90506107d4816000856109db565b9150505b9392505050565b600060086001806107f260026020610eaa565b6107fc9190610eaa565b6108069190610eaa565b6108109190610ebd565b8260ff911c1692915050565b600061082f61082b8484610a06565b5490565b90505b92915050565b6000838360405160200161084d929190610ed4565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b821561094157602083106108e2576020830484019350602083816108de576108de610f0f565b0692505b82156109415760208390036000818410156109065750600019600884021c19610911565b50600019600882021c195b8554600886021b81198451168282161784525081841161093257505061097f565b50600194909401939182900391015b5b602082106109635783548152600190930192601f1990910190602001610942565b811561097f5780518454600019600885021c9182169119161781525b50505050565b6000828260405160200161099a929190610ed4565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b60405160208101601f19603f84840101166040528282526109fe858585846108b8565b509392505050565b60008282604051602001610a1b929190610ed4565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610aee57610aee610aaf565b604052919050565b600067ffffffffffffffff821115610b1057610b10610aaf565b50601f01601f191660200190565b600082601f830112610b2f57600080fd5b8151610b42610b3d82610af6565b610ac5565b81815260208581848701011115610b5857600080fd5b60005b83811015610b76578581018201518382018301528101610b5b565b50600092820101919091529392505050565b600060208284031215610b9a57600080fd5b815167ffffffffffffffff811115610bb157600080fd5b610bbd84828501610b1e565b949350505050565b600082601f830112610bd657600080fd5b8135610be4610b3d82610af6565b818152846020838601011115610bf957600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610c2e57600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115610c6157600080fd5b610c6d88828901610bc5565b9150509295509295909350565b60008060008060808587031215610c9057600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115610cbc57600080fd5b610cc887828801610bc5565b91505092959194509250565b60008060408385031215610ce757600080fd5b82359150602083013567ffffffffffffffff811115610d0557600080fd5b610d1185828601610bc5565b9150509250929050565b600080600060608486031215610d3057600080fd5b8335925060208401359150604084013567ffffffffffffffff811115610d5557600080fd5b610d6186828701610bc5565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b80516020808301519190811015610da2576000198160200360031b1b821691505b50919050565b6000606082018583526020606081850152818651808452608086019150828801935060005b81811015610de957845183529383019391830191600101610dcd565b5050809350505050826040830152949350505050565b600080600060608486031215610e1457600080fd5b835167ffffffffffffffff80821115610e2c57600080fd5b610e3887838801610b1e565b9450602086015193506040860151915080821115610e5557600080fd5b50610d6186828701610b1e565b634e487b7160e01b600052601160045260246000fd5b8082018082111561083257610832610e62565b600060ff821660ff8103610ea157610ea1610e62565b60010192915050565b8181038181111561083257610832610e62565b808202811582820484141761083257610832610e62565b82815260006020808301845182860160005b82811015610f0257815184529284019290840190600101610ee6565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000aa164736f6c6343000815000a608060405234801561001057600080fd5b50610a77806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806345ec93541161005057806345ec9354146100ec578063d737d0c7146100ff578063e1af802c1461010757600080fd5b806301ffc9a714610077578063119df25f1461009f578063319585fb146100cc575b600080fd5b61008a6100853660046107a3565b61010f565b60405190151581526020015b60405180910390f35b6100a76101a8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100df6100da366004610802565b6101b7565b60405161009691906108f9565b604051601f193601358152602001610096565b6100a7610272565b6100a761027c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101b2610286565b905090565b60606101c16102b8565b73ffffffffffffffffffffffffffffffffffffffff1663d72a26657fe762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d8460405160200161020e91906108f9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161023a92919061090c565b600060405180830381600087803b15801561025457600080fd5b505af1158015610268573d6000803e3d6000fd5b5093949350505050565b60006101b26101a8565b60006101b26103bf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102b55750335b90565b6000806102c43061040b565b604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f50757070657452656769737472790000000000000000000000000000000000006030820152919250600091610363910160405160208183030381529060405261035d90610925565b8361052f565b905073ffffffffffffffffffffffffffffffffffffffff81166101a2576040517f9434f7e10000000000000000000000000000000000000000000000000000000081523060048201526024810183905260440160405180910390fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610406573391505090565b919050565b604080516001808252818301909252600091829190602080830190803683370190505090508273ffffffffffffffffffffffffffffffffffffffff1660001b8160008151811061045d5761045d61094c565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f53797374656d526567697374727900000000000000000000000000000000000060308201528151808203909301835281019052600090610527906104ff90610925565b8360007e200100200000000000000000000000000000000000000000000000000000006105ac565b949350505050565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106105685761056861094c565b602090810291909101015260006105a08583837e140100140000000000000000000000000000000000000000000000000000006105ac565b60601c95945050505050565b6000806105b76103bf565b90503073ffffffffffffffffffffffffffffffffffffffff8216036105ea576105e286868686610683565b915050610527565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d5990610642908990899089908990600401610962565b602060405180830381865afa15801561065f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e291906109bd565b60006106b061069286866106b9565b60ff858116601b0360080285901c166106ab858761070f565b610752565b95945050505050565b600082826040516020016106ce9291906109d6565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561074a5761073660ff601b83900360080287901c1683610a27565b91508061074281610a3a565b915050610714565b509392505050565b6000602082106107785760208204840193506020828161077457610774610a54565b0691505b508254600882021b60208290038084111561074a576001850154600882021c82179150509392505050565b6000602082840312156107b557600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146107e557600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561081457600080fd5b813567ffffffffffffffff8082111561082c57600080fd5b818401915084601f83011261084057600080fd5b813581811115610852576108526107ec565b604051601f8201601f19908116603f0116810190838211818310171561087a5761087a6107ec565b8160405282815287602084870101111561089357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000815180845260005b818110156108d9576020818501810151868301820152016108bd565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006107e560208301846108b3565b82815260406020820152600061052760408301846108b3565b80516020808301519190811015610946576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156109a357845183529383019391830191600101610987565b505060ff9690961660408501525050506060015292915050565b6000602082840312156109cf57600080fd5b5051919050565b82815260006020808301845182860160005b82811015610a04578151845292840192908401906001016109e8565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101a2576101a2610a11565b60006000198203610a4d57610a4d610a11565b5060010190565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000a608060405234801561001057600080fd5b50611a59806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806345ec93541161005b57806345ec9354146100ec5780638d53b208146100ff578063e1af802c14610112578063ef5d6bbb1461011a57600080fd5b806301ffc9a714610082578063119df25f146100aa57806340554c3a146100d7575b600080fd5b61009561009036600461165b565b61012d565b60405190151581526020015b60405180910390f35b6100b26101c6565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100ea6100e536600461169d565b6101d5565b005b604051601f1936013581526020016100a1565b6100ea61010d36600461169d565b6101f6565b6100b261020c565b6100ea61012836600461169d565b610216565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101c057507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101d061023d565b905090565b6101e6826101e16101c6565b61026f565b6101f282826001610333565b5050565b610202826101e16101c6565b6101f28282610463565b60006101d0610568565b610222826101e16101c6565b61022c82826105b4565b6101e6826102386101c6565b610463565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c8061026c5750335b90565b73ffffffffffffffffffffffffffffffffffffffff81166102d17f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff000000000000000000000000000000008516176106c2565b73ffffffffffffffffffffffffffffffffffffffff16146101f2576102f58261079d565b816040517fd787b73700000000000000000000000000000000000000000000000000000000815260040161032a929190611736565b60405180910390fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061036857610368611784565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106103a1576103a1611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f757263654163636573730000000000000000000000000000000000006030820152815180820390930183528101905261045d9061040d9061179a565b8260008560405160200161042891151560f81b815260010190565b60408051601f198184030181529190527e010100010000000000000000000000000000000000000000000000000000006108da565b50505050565b604080516002808252606082018352600092602083019080368337019050509050828160008151811061049857610498611784565b6020026020010181815250508173ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106104d1576104d1611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f75726365416363657373000000000000000000000000000000000000603082015281518082039093018352810190526105639061053d9061179a565b827e010100010000000000000000000000000000000000000000000000000000006108f6565b505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff16806105af573391505090565b919050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106105ea576105ea611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e657200000000000000000000000000000000000060308201528151808203909301835281019052610563906106569061179a565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006108da565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106106fb576106fb611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906107929061076a9061179a565b8360007e14010014000000000000000000000000000000000000000000000000000000610c11565b60601c949350505050565b606081601081901b60006107b083610c47565b9050827fffffffffffffffffffffffffffff00000000000000000000000000000000000083161561080b576108067fffffffffffffffffffffffffffff0000000000000000000000000000000000008416610c5e565b610842565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156108785761087383610c5e565b6108af565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016108c1939291906117c1565b6040516020818303038152906040529350505050919050565b6108ef85856108e98487610d10565b85610d53565b5050505050565b7f6f74000000000000000000000000000000000000000000000000000000000000837fffff000000000000000000000000000000000000000000000000000000000000160361097c57827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d078360405161096f919061188a565b60405180910390a2505050565b60006109878461100b565b905060005b8151811015610a645760008282815181106109a9576109a9611784565b602002602001015190506109d56040826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610a51576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf4590610a1e9089908990899060040161189d565b600060405180830381600087803b158015610a3857600080fd5b505af1158015610a4c573d6000803e3d6000fd5b505050505b5080610a5c816118dc565b91505061098c565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0784604051610a95919061188a565b60405180910390a26000610aa98585611109565b9050610b02816000610aba8661115f565b67ffffffffffffffff811115610ad257610ad261176e565b6040519080825280601f01601f191660200182016040528015610afc576020820181803683370190505b50611182565b6000610b0d84611198565b1115610b2e576000610b1f86866111d5565b9050610b2c81602061122b565b505b60005b8251811015610c09576000838281518110610b4e57610b4e611784565b60200260200101519050610b7a6080826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610bf6576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b90610bc3908a908a908a9060040161189d565b600060405180830381600087803b158015610bdd57600080fd5b505af1158015610bf1573d6000803e3d6000fd5b505050505b5080610c01816118dc565b915050610b31565b505050505050565b6000610c3e610c208686611109565b60ff858116601b0360080285901c16610c398587610d10565b611268565b95945050505050565b6000610c55607060106118f6565b9190911b919050565b606060005b6010811015610ccd577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff000000000000000000000000000000000000000000000000000000000000001615610ccd5780610cc5816118dc565b915050610c63565b604080517fffffffffffffffffffffffffffffffff000000000000000000000000000000008516602082015281516030909101909152818152805b949350505050565b600080805b8360ff16811015610d4b57610d3760ff601b83900360080287901c16836118f6565b915080610d43816118dc565b915050610d15565b509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610ddd57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610dd093929190611909565b60405180910390a261045d565b6000610de98585611109565b90506000610df68661100b565b905060005b8151811015610ed5576000828281518110610e1857610e18611784565b60200260200101519050610e446004826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610ec2576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610e8f908b908b908b908b90600401611946565b600060405180830381600087803b158015610ea957600080fd5b505af1158015610ebd573d6000803e3d6000fd5b505050505b5080610ecd816118dc565b915050610dfb565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610f0a93929190611909565b60405180910390a2610f25828565ffffffffffff1685611182565b60005b8151811015611002576000828281518110610f4557610f45611784565b60200260200101519050610f716008826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610fef576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610fbc908b908b908b908b90600401611946565b600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050505b5080610ffa816118dc565b915050610f28565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061104557611045611784565b60209081029190910181019190915260408051613a3160f11b818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015281518082039093018352810190526000906110d4906110cc9061179a565b8360006112b9565b9050610d086110e682600084516112f3565b611383565b60008160ff16826110fc8560581c90565b1660ff1614905092915050565b6000828260405160200161111e92919061198a565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b6000600861116f600260206119c5565b61117991906119d8565b9190911c919050565b610563838383516111938560200190565b61139b565b600060086001806111ab600260206119c5565b6111b591906119c5565b6111bf91906119c5565b6111c991906119d8565b8260ff911c1692915050565b600082826040516020016111ea92919061198a565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000602061123a83601f6118f6565b6112449190611a05565b61124e90846118f6565b90505b808310156105635760008355600183019250611251565b60006020821061128e5760208204840193506020828161128a5761128a6119ef565b0691505b508254600882021b602082900380841115610d4b576001850154600882021c82179150509392505050565b6060610d086112c985858561145b565b60006112ee856112d989896114db565b9060ff166028026038011c64ffffffffff1690565b6114ee565b6000818311158015611306575083518211155b611342578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161032a93929190611a27565b6020840161135084826118f6565b9050600061135e85856119c5565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006113948360156000611511565b9392505050565b821561141557602083106113c5576020830484019350602083816113c1576113c16119ef565b0692505b82156114155760208390036000600019600885021c1990506008850281811c91508351811c905081198754168282161787555081841161140657505061045d565b50600194909401939182900391015b5b602082106114375780518455600190930192601f1990910190602001611416565b811561045d576000600019600884021c198554835182169119161785555050505050565b6000838360405160200161147092919061198a565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006113946114ea84846111d5565b5490565b60405160208101601f19603f8484010116604052828252610d4b8585858461158c565b6060600061151f8560801c90565b90506fffffffffffffffffffffffffffffffff85166000858281611545576115456119ef565b04905060405193506020840160208202810160405281855260005b82811015611580578451871c825293870193602090910190600101611560565b50505050509392505050565b821561161557602083106115b6576020830484019350602083816115b2576115b26119ef565b0692505b82156116155760208390036000818410156115da5750600019600884021c196115e5565b50600019600882021c195b8554600886021b81198451168282161784525081841161160657505061045d565b50600194909401939182900391015b5b602082106116375783548152600190930192601f1990910190602001611616565b811561045d576000600019600884021c198251865482169119161782525050505050565b60006020828403121561166d57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461139457600080fd5b600080604083850312156116b057600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff811681146116db57600080fd5b809150509250929050565b60005b838110156117015781810151838201526020016116e9565b50506000910152565b600081518084526117228160208601602086016116e6565b601f01601f19169290920160200192915050565b604081526000611749604083018561170a565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b805160208083015191908110156117bb576000198160200360031b1b821691505b50919050565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516118228160038601602089016116e6565b8084019050816003820152845191506118428260048301602088016116e6565b0160040195945050505050565b600081518084526020808501945080840160005b8381101561187f57815187529582019590820190600101611863565b509495945050505050565b602081526000611394602083018461184f565b8381526060602082015260006118b6606083018561184f565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b600060001982036118ef576118ef6118c6565b5060010190565b808201808211156101c0576101c06118c6565b60608152600061191c606083018661184f565b65ffffffffffff85166020840152828103604084015261193c818561170a565b9695505050505050565b84815260806020820152600061195f608083018661184f565b65ffffffffffff85166040840152828103606084015261197f818561170a565b979650505050505050565b82815260006020808301845182860160005b828110156119b85781518452928401929084019060010161199c565b5091979650505050505050565b818103818111156101c0576101c06118c6565b80820281158282048414176101c0576101c06118c6565b634e487b7160e01b600052601260045260246000fd5b600082611a2257634e487b7160e01b600052601260045260246000fd5b500490565b606081526000611a3a606083018661170a565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b506118ac806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806345ec93541161005057806345ec9354146100e1578063c9c85a60146100f4578063e1af802c1461010757600080fd5b806301ffc9a714610077578063119df25f1461009f57806345afd199146100cc575b600080fd5b61008a610085366004611460565b61010f565b60405190151581526020015b60405180910390f35b6100a76101a8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100df6100da3660046114a2565b6101b7565b005b604051601f193601358152602001610096565b6100df6101023660046114f3565b6102ac565b6100a76103e7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101b26103f1565b905090565b6101c8836101c36101a8565b610423565b60006101d384610473565b90508082111561021e576040517f0e0e2d4d00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6102318461022c848461154e565b610563565b6000808473ffffffffffffffffffffffffffffffffffffffff168460405160006040518083038185875af1925050503d806000811461028c576040519150601f19603f3d011682016040523d82523d6000602084013e610291565b606091505b5091509150816102a4576102a48161066d565b505050505050565b7f6e73000000000000000000000000000000000000000000000000000000000000827fffff0000000000000000000000000000000000000000000000000000000000001614610355577f6e730000000000000000000000000000000000000000000000000000000000008261032084610675565b6040517f5c30fb6f000000000000000000000000000000000000000000000000000000008152600401610215939291906115b1565b61035e826107b2565b61036a836101c36101a8565b600061037584610473565b9050808211156103bb576040517f0e0e2d4d0000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401610215565b6103c98461022c848461154e565b6103e183836103d786610473565b61022c91906115f2565b50505050565b60006101b2610800565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806104205750335b90565b61042d828261084c565b61046f5761043a82610675565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610215929190611605565b5050565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106104ac576104ac61163d565b60209081029190910181019190915260408051613a3160f11b818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f42616c616e6365730000000000000000000000000000000000000000000000006030820152815180820390930183528101905260009061055b906105339061166c565b8360007e200100200000000000000000000000000000000000000000000000000000006108b1565b949350505050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106105995761059961163d565b60209081029190910181019190915260408051613a3160f11b818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015281518082039093018352810190526106689061061d9061166c565b8260008560405160200161063391815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006108e7565b505050565b805160208201fd5b606081601081901b600061068883610903565b9050827fffffffffffffffffffffffffffff0000000000000000000000000000000000008316156106e3576106de7fffffffffffffffffffffffffffff000000000000000000000000000000000000841661091a565b61071a565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156107505761074b8361091a565b610787565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b60405160200161079993929190611693565b6040516020818303038152906040529350505050919050565b6107bb816109c8565b6107fd57806107c982610675565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610215929190611721565b50565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610847573391505090565b919050565b600061089a7f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff0000000000000000000000000000000085161783610ac2565b806108aa57506108aa8383610ac2565b9392505050565b60006108de6108c08686610bb9565b60ff858116601b0360080285901c166108d98587610c0f565b610c52565b95945050505050565b6108fc85856108f68487610c0f565b85610ca3565b5050505050565b6000610911607060106115f2565b9190911b919050565b606060005b6010811015610989577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff00000000000000000000000000000000000000000000000000000000000000161561098957806109818161173a565b91505061091f565b604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166020820152815160309091019091528181528061055b565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110610a0157610a0161163d565b60209081029190910181019190915260408051613a3160f11b928101929092527f73746f726500000000000000000000000000000000000000000000000000000060228301527f5265736f757263654964730000000000000000000000000000000000000000006030830152600091610ab691015b604051602081830303815290604052610a8e9061166c565b8360007e010100010000000000000000000000000000000000000000000000000000006108b1565b905061055b8160f81c90565b604080516002808252606082018352600092839291906020830190803683370190505090508381600081518110610afb57610afb61163d565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b81600181518110610b3457610b3461163d565b60209081029190910181019190915260408051613a3160f11b928101929092527f776f726c6400000000000000000000000000000000000000000000000000000060228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152600091610bad9101610a76565b90506108de8160f81c90565b60008282604051602001610bce929190611754565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff16811015610c4a57610c3660ff601b83900360080287901c16836115f2565b915080610c428161173a565b915050610c14565b509392505050565b600060208210610c7857602082048401935060208281610c7457610c7461178f565b0691505b508254600882021b602082900380841115610c4a576001850154600882021c82179150509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610d2d57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610d20939291906117f9565b60405180910390a26103e1565b6000610d398585610bb9565b90506000610d4686610f5b565b905060005b8151811015610e25576000828281518110610d6857610d6861163d565b60200260200101519050610d946004826affffffffffffffffffffff191661103b90919063ffffffff16565b15610e12576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610ddf908b908b908b908b90600401611836565b600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050505b5080610e1d8161173a565b915050610d4b565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610e5a939291906117f9565b60405180910390a2610e75828565ffffffffffff1685611059565b60005b8151811015610f52576000828281518110610e9557610e9561163d565b60200260200101519050610ec16008826affffffffffffffffffffff191661103b90919063ffffffff16565b15610f3f576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610f0c908b908b908b908b90600401611836565b600060405180830381600087803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b505050505b5080610f4a8161173a565b915050610e78565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610f9557610f9561163d565b60209081029190910181019190915260408051613a3160f11b818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015281518082039093018352810190526000906110249061101c9061166c565b83600061106f565b905061055b61103682600084516110a9565b611139565b60008160ff168261104c8560581c90565b1660ff1614905092915050565b6106688383835161106a8560200190565b61114a565b606061055b61107f85858561120a565b60006110a48561108f898961128a565b9060ff166028026038011c64ffffffffff1690565b61129d565b60008183111580156110bc575083518211155b6110f8578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016102159392919061187a565b6020840161110684826115f2565b90506000611114858561154e565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006108aa83601560006112c0565b82156111c45760208310611174576020830484019350602083816111705761117061178f565b0692505b82156111c45760208390036000600019600885021c1990506008850281811c91508351811c90508119875416828216178755508184116111b55750506103e1565b50600194909401939182900391015b5b602082106111e65780518455600190930192601f19909101906020016111c5565b81156103e1576000600019600884021c198554835182169119161785555050505050565b6000838360405160200161121f929190611754565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006108aa611299848461133b565b5490565b60405160208101601f19603f8484010116604052828252610c4a85858584611391565b606060006112ce8560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816112f4576112f461178f565b04905060405193506020840160208202810160405281855260005b8281101561132f578451871c82529387019360209091019060010161130f565b50505050509392505050565b60008282604051602001611350929190611754565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b821561141a57602083106113bb576020830484019350602083816113b7576113b761178f565b0692505b821561141a5760208390036000818410156113df5750600019600884021c196113ea565b50600019600882021c195b8554600886021b81198451168282161784525081841161140b5750506103e1565b50600194909401939182900391015b5b6020821061143c5783548152600190930192601f199091019060200161141b565b81156103e1576000600019600884021c198251865482169119161782525050505050565b60006020828403121561147257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108aa57600080fd5b6000806000606084860312156114b757600080fd5b83359250602084013573ffffffffffffffffffffffffffffffffffffffff811681146114e257600080fd5b929592945050506040919091013590565b60008060006060848603121561150857600080fd5b505081359360208301359350604090920135919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156101a2576101a261151f565b60005b8381101561157c578181015183820152602001611564565b50506000910152565b6000815180845261159d816020860160208601611561565b601f01601f19169290920160200192915050565b7fffff000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006108de6060830184611585565b808201808211156101a2576101a261151f565b6040815260006116186040830185611585565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051602080830151919081101561168d576000198160200360031b1b821691505b50919050565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516116f4816003860160208901611561565b808401905081600382015284519150611714826004830160208801611561565b0160040195945050505050565b82815260406020820152600061055b6040830184611585565b6000600019820361174d5761174d61151f565b5060010190565b82815260006020808301845182860160005b8281101561178257815184529284019290840190600101611766565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081518084526020808501945080840160005b838110156117ee578151875295820195908201906001016117d2565b509495945050505050565b60608152600061180c60608301866117be565b65ffffffffffff85166020840152828103604084015261182c8185611585565b9695505050505050565b84815260806020820152600061184f60808301866117be565b65ffffffffffff85166040840152828103606084015261186f8185611585565b979650505050505050565b60608152600061188d6060830186611585565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b50610af5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638fc8cf7e116100505780638fc8cf7e146100df578063ce5e8dd9146100ff578063e1af802c1461011257600080fd5b806301ffc9a714610077578063119df25f1461009f57806345ec9354146100cc575b600080fd5b61008a61008536600461063e565b61011a565b60405190151581526020015b60405180910390f35b6100a76101b3565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b604051601f193601358152602001610096565b6100f26100ed3660046106d3565b6101c2565b6040516100969190610739565b6100f261010d3660046106d3565b6103d7565b6100a76105ae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101ad57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101bd6105b8565b905090565b606060006101ce6105ae565b90508267ffffffffffffffff8111156101e9576101e96107d1565b60405190808252806020026020018201604052801561021c57816020015b60608152602001906001900390816102075790505b50915060005b838110156103cf5760008073ffffffffffffffffffffffffffffffffffffffff84168063894ecc5889898781811061025c5761025c610800565b905060200281019061026e919061082f565b61027c90602081019061086d565b8a8a8881811061028e5761028e610800565b90506020028101906102a0919061082f565b602001358b8b898181106102b6576102b6610800565b90506020028101906102c8919061082f565b6102d69060408101906108a3565b6040516024016102e99493929190610933565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516103369250610973565b600060405180830381855af49150503d8060008114610371576040519150601f19603f3d011682016040523d82523d6000602084013e610376565b606091505b50915091508161038957610389816105ea565b8080602001905181019061039d9190610985565b8584815181106103af576103af610800565b6020026020010181905250505080806103c790610a32565b915050610222565b505092915050565b606060006103e36105ae565b90508267ffffffffffffffff8111156103fe576103fe6107d1565b60405190808252806020026020018201604052801561043157816020015b606081526020019060019003908161041c5790505b50915060005b838110156103cf5760008073ffffffffffffffffffffffffffffffffffffffff841680633ae7af0889898781811061047157610471610800565b90506020028101906104839190610a91565b358a8a8881811061049657610496610800565b90506020028101906104a89190610a91565b6104b69060208101906108a3565b6040516024016104c893929190610ac5565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516105159250610973565b600060405180830381855af49150503d8060008114610550576040519150601f19603f3d011682016040523d82523d6000602084013e610555565b606091505b50915091508161056857610568816105ea565b8080602001905181019061057c9190610985565b85848151811061058e5761058e610800565b6020026020010181905250505080806105a690610a32565b915050610437565b60006101bd6105f2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806105e75750335b90565b805160208201fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610639573391505090565b919050565b60006020828403121561065057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461068057600080fd5b9392505050565b60008083601f84011261069957600080fd5b50813567ffffffffffffffff8111156106b157600080fd5b6020830191508360208260051b85010111156106cc57600080fd5b9250929050565b600080602083850312156106e657600080fd5b823567ffffffffffffffff8111156106fd57600080fd5b61070985828601610687565b90969095509350505050565b60005b83811015610730578181015183820152602001610718565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156107c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526107a5818989018a8501610715565b601f01601f191695909501860194509285019290850190600101610760565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261086357600080fd5b9190910192915050565b60006020828403121561087f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461068057600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126108d857600080fd5b83018035915067ffffffffffffffff8211156108f357600080fd5b6020019150368190038213156106cc57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610969606083018486610908565b9695505050505050565b60008251610863818460208701610715565b60006020828403121561099757600080fd5b815167ffffffffffffffff808211156109af57600080fd5b818401915084601f8301126109c357600080fd5b8151818111156109d5576109d56107d1565b604051601f8201601f19908116603f011681019083821181831017156109fd576109fd6107d1565b81604052828152876020848701011115610a1657600080fd5b610a27836020830160208801610715565b979650505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261086357600080fd5b838152604060208201526000610adf604083018486610908565b9594505050505056fea164736f6c6343000815000a608060405234801561001057600080fd5b5061565b80620000216000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063530f4b6011610097578063b29e408911610066578063b29e408914610226578063bfdfaff714610239578063d5f8337f1461024c578063e1af802c1461025f57600080fd5b8063530f4b60146101da578063742d6118146101ed5780638da798da14610200578063a92813ad1461021357600080fd5b80631d2257ba116100d35780631d2257ba1461017557806326d98102146101885780633350b6a9146101b457806345ec9354146101c757600080fd5b806301ffc9a714610105578063056091291461012d5780630ba51f4914610142578063119df25f14610155575b600080fd5b610118610113366004614aa7565b610267565b60405190151581526020015b60405180910390f35b61014061013b366004614ad7565b6102d0565b005b610140610150366004614b53565b6102ef565b61015d6103bf565b6040516001600160a01b039091168152602001610124565b610140610183366004614ca0565b6103ce565b61019b610196366004614cf9565b61044e565b6040516001600160e01b03199091168152602001610124565b6101406101c2366004614d40565b610546565b604051601f193601358152602001610124565b6101406101e8366004614d98565b610731565b61019b6101fb366004614dd6565b610772565b61014061020e366004614e24565b61082d565b610140610221366004614ad7565b610946565b610140610234366004614e5e565b6109ba565b610140610247366004614e77565b610a5e565b61014061025a366004614d98565b610b28565b61015d610b8f565b60006001600160e01b031982167fb5dee1270000000000000000000000000000000000000000000000000000000014806102ca57506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6102e1826102dc6103bf565b610b99565b6102eb8282610c1f565b5050565b60006102fa89610c6c565b6fffffffffffffffffffffffffffffffff191603610359578761031c89610c83565b6040517fe4ac069e000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b60405180910390fd5b610389616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008a1617610d97565b610395886102dc6103bf565b6103b5888888886103a6888a614f1a565b6103b08789614f1a565b610de2565b5050505050505050565b60006103c9611082565b905090565b6103e06103d96103bf565b84846110b4565b6103e9826111de565b80156103f6575060008151115b15610449576000610406836111fa565b9050610432817faf585477000000000000000000000000000000000000000000000000000000006112d5565b61044661043d6103bf565b84846000611330565b50505b505050565b600061045c836102dc6103bf565b600061048561046b8560101b90565b71ffffffffffffffffffffffffffffffffffff191661135d565b9050600061049a61049586610c6c565b61135d565b905060008282866040516020016104b393929190614f9e565b60405160208183030381529060405290508080519060200120935060006104d9856113f1565b9050801561051f576040517f3d1d1ae20000000000000000000000000000000000000000000000000000000081526001600160e01b031986166004820152602401610350565b855160208701206105318689836114e0565b61053b86846115e8565b505050505092915050565b7f7379000000000000000000000000000000000000000000000000000000000000836001600160f01b031916146105d7577f7379000000000000000000000000000000000000000000000000000000000000836105a285610c83565b6040517f5c30fb6f00000000000000000000000000000000000000000000000000000000815260040161035093929190615014565b7dffffffffffffffffffffffffffff000000000000000000000000000000008316616e7360f01b1761060881610d97565b610614816102dc6103bf565b61063e837fb5dee127000000000000000000000000000000000000000000000000000000006112d5565b600061064985610c6c565b6fffffffffffffffffffffffffffffffff19160361066b578361031c85610c83565b6000610676846116ee565b905080158015906106875750848114155b156106c9576040517fc0b707410000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610350565b60006106d4866111fa565b90506001600160a01b038116156106fd576106ee816117d0565b6106f883826118a4565b610708565b610708866001611997565b610713868686611a8f565b61071d8587611b6f565b61072983866001611c0f565b505050505050565b61075b827f1873396a000000000000000000000000000000000000000000000000000000006112d5565b610767836102dc6103bf565b610449838383611cce565b60408051616e7360f01b602082015260006022820181905260308201819052916107b791016040516020818303038152906040526107af9061503d565b6102dc6103bf565b508151602083012060006107ca826113f1565b90508015610810576040517f3d1d1ae20000000000000000000000000000000000000000000000000000000081526001600160e01b031983166004820152602401610350565b61081b8286856114e0565b61082582856115e8565b509392505050565b610857827f780ac2fc000000000000000000000000000000000000000000000000000000006112d5565b6108d36108626103bf565b600084846040516024016108769190615061565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f13861fb500000000000000000000000000000000000000000000000000000000179052611d2f565b506102eb826001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109399190615074565b8251602084012084611d40565b610952826102dc6103bf565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d486f6f6b7300000000000000000000000000000000000000000060308201526102eb91015b6040516020818303038152906040526109b39061503d565b8383611e73565b616e7360f01b816001600160f01b031916146109e057616e7360f01b816105a283610c83565b6109e981611f9a565b15610a2c57806109f882610c83565b6040517f0dc28f6a000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b610a37816001611997565b610a4881610a436103bf565b61207c565b610a5b81610a546103bf565b6001611c0f565b50565b616e7360f01b836001600160f01b03191614610a8457616e7360f01b836105a285610c83565b610a8d826111de565b610ac3576040517f71ee9e8100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610acf836102dc6103bf565b6000610ada836111fa565b9050610b06817faf585477000000000000000000000000000000000000000000000000000000006112d5565b610b108484612110565b815115610b225761044661043d6103bf565b50505050565b610b52827f540fbfa8000000000000000000000000000000000000000000000000000000006112d5565b610b5e836102dc6103bf565b610449836bffffffffffffffffffffffff19606085901b166bff0000000000000000000000605885901b16176121a4565b60006103c9612293565b6001600160a01b038116610bd3616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008516176122d2565b6001600160a01b0316146102eb57610bea82610c83565b816040517fd787b7370000000000000000000000000000000000000000000000000000000081526004016103509291906150a7565b60408051613a3160f11b60208201526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201526102eb910161099b565b6000610c7a607060106150e8565b9190911b919050565b606081601081901b6000610c9683610c6c565b90508271ffffffffffffffffffffffffffffffffffff19831615610cd757610cd271ffffffffffffffffffffffffffffffffffff19841661135d565b610d0e565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6fffffffffffffffffffffffffffffffff19831615610d3557610d308361135d565b610d6c565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b604051602001610d7e939291906150fb565b6040516020818303038152906040529350505050919050565b610da081611f9a565b610a5b5780610dae82610c83565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b613a3160f11b866001600160f01b03191614801590610e105750611bdd60f21b866001600160f01b03191614155b15610e7157613a3160f11b8687604051602001610e2f91815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252610350939291600401615014565b610e7a856123a2565b610e85846001612523565b610e90836000612523565b60e084901c60e885901c0160ff16825114610ef05760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b60e085901c60e886901c0160ff16815114610f505760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff1614610fc85760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b610fd186611f9a565b1561102b578586604051602001610fea91815260200190565b60408051601f19818403018152908290527fdfaaf9cf0000000000000000000000000000000000000000000000000000000082526103509291600401614f01565b61107786868686866040516020016110439190615171565b604051602081830303815290604052866040516020016110639190615171565b6040516020818303038152906040526126cf565b610729866001611997565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806110b15750335b90565b604080516002808252606082018352600092602083019080368337019050509050836001600160a01b031660001b816000815181106110f5576110f56151f1565b602002602001018181525050826001600160a01b031660001b81600181518110611121576111216151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5573657244656c65676174696f6e436f000000000000000000000000000000006030830152610b2291015b6040516020818303038152906040526111939061503d565b826000856040516020016111a991815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006127d3565b600081151580156102ca57506111f3826127e8565b1592915050565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611233576112336151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000906112ca906112a29061503d565b8360007e15020014010000000000000000000000000000000000000000000000000000612863565b60601c949350505050565b6112df8282612899565b6102eb576040517f74b5e6ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526001600160e01b031982166024820152604401610350565b6060600080611341878787876128bc565b91509150816113535761135381612aa0565b9695505050505050565b606060005b60108110156113bd576fffffffffffffffffffffffffffffffff198316600882021b7fff0000000000000000000000000000000000000000000000000000000000000016156113bd57806113b581615207565b915050611362565b604080516fffffffffffffffffffffffffffffffff198516602082015281516030909101909152818152805b949350505050565b60408051600180825281830190925260009182919060208083019080368337019050509050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681600081518110611449576114496151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015281518082039093018352810190526000906113e9906114b89061503d565b8360007e24020020040000000000000000000000000000000000000000000000000000612863565b60006114ec8383612aa8565b60408051600180825281830190925291925060009160609183919060208083019080368337019050509050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061154a5761154a6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015281518082039093018352810190526115df906115b69061503d565b828686867e24020020040000000000000000000000000000000000000000000000000000612ae7565b50505050505050565b606060006115f583612e01565b9050600061160284612e11565b6040805160018082528183019092529192506000919060208083019080368337019050509050857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061165b5761165b6151f1565b60209081029190910181019190915260408051611bdd60f21b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e5369676e617475720000000000000000000000000000000060308201528151808203909301835281019052610729906116c79061503d565b828686867c0100000000000000000000000000000000000000000000000000000000612ae7565b60408051600180825281830190925260009182919060208083019080368337019050509050826001600160a01b031660001b81600081518110611733576117336151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d526567697374727900000000000000000000000000000000000060308301526000916113e991015b6040516020818303038152906040526117a89061503d565b8360007e20010020000000000000000000000000000000000000000000000000000000612863565b60408051600180825281830190925260009160208083019080368337019050509050816001600160a01b031660001b81600081518110611812576118126151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d5265676973747279000000000000000000000000000000000000603082015281518082039093018352810190526102eb9061187e9061503d565b827e20010020000000000000000000000000000000000000000000000000000000612e3a565b60408051600280825260608201835260009260208301908036833701905050905082816000815181106118d9576118d96151f1565b602002602001018181525050816001600160a01b031660001b81600181518110611905576119056151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f7572636541636365737300000000000000000000000000000000000060308201528151808203909301835281019052610449906119719061503d565b827e01010001000000000000000000000000000000000000000000000000000000612e3a565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106119cd576119cd6151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015261044991015b604051602081830303815290604052611a3f9061503d565b82600085604051602001611a5a91151560f81b815260010190565b60408051601f198184030181529190527e010100010000000000000000000000000000000000000000000000000000006127d3565b6000611a9b838361311a565b604080516001808252818301909252919250600091606091839190602080830190803683370190505090508681600081518110611ada57611ada6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526115df90611b469061503d565b828686867e15020014010000000000000000000000000000000000000000000000000000612ae7565b60408051600180825281830190925260009160208083019080368337019050509050826001600160a01b031660001b81600081518110611bb157611bb16151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d52656769737472790000000000000000000000000000000000006030830152610449910161117b565b6040805160028082526060820183526000926020830190803683370190505090508381600081518110611c4457611c446151f1565b602002602001018181525050826001600160a01b031660001b81600181518110611c7057611c706151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152610b229101611a27565b613a3160f11b836001600160f01b03191614611cfe57613a3160f11b8384604051602001610e2f91815260200190565b610449836bffffffffffffffffffffffff19606085901b166bff0000000000000000000000605885901b161761314a565b6060600080611341878787876131de565b604080516002808252606082018352600092602083019080368337019050509050836fffffffffffffffffffffffffffffffff191681600081518110611d8857611d886151f1565b6020026020010181815250508281600181518110611da857611da86151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f496e7374616c6c65644d6f64756c6573000000000000000000000000000000006030830152610b2291015b604051602081830303815290604052611e1a9061503d565b6040516bffffffffffffffffffffffff19606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006127d3565b6000611e7f8484613256565b90506000815167ffffffffffffffff811115611e9d57611e9d614be9565b604051908082528060200260200182016040528015611ec6578160200160208202803683370190505b5090506000805b8351811015611f8b57846001600160a01b0316611f11858381518110611ef557611ef56151f1565b60200260200101516affffffffffffffffffffff191660601c90565b6001600160a01b031614611f8357838181518110611f3157611f316151f1565b6020026020010151838381518110611f4b57611f4b6151f1565b7fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000909216602092830291909101909101526001909101905b600101611ecd565b508082526107298686846132c1565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611fd357611fd36151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015260009161207091015b6040516020818303038152906040526120489061503d565b8360007e01010001000000000000000000000000000000000000000000000000000000612863565b90506113e98160f81c90565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106120b2576120b26151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d6573706163654f776e657200000000000000000000000000000000000060308301526104499101611e02565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110612146576121466151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d65737061636544656c65676174000000000000000000000000000000006030830152610449910161117b565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106121da576121da6151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b73000000000000000000000000000000000000000000603083015261044991015b60405160208183030381529060405261224c9061503d565b6040517fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000851660208201528390600090603501604051602081830303815290604052613318565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e175546000906001600160a01b0316806122cd573391505090565b919050565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061230b5761230b6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906112ca9061237a9061503d565b8360007e14010014000000000000000000000000000000000000000000000000000000612863565b806123d9576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006123e4826133c9565b9050600581111561242b576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401610350565b600061243683613406565b9050600061244483836150e8565b9050601c81111561248b576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401610350565b60005b828110156104465760ff601b82900360080286901c1660008190036124df576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081111561251a576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060010161248e565b8015801561252f575081155b1561255057604051635318beb960e01b815260006004820152602401610350565b600061255b836133c9565b9050600581111561258257604051635318beb960e01b815260048101829052602401610350565b600061258d84613406565b9050600061259b83836150e8565b9050601c8111156125c257604051635318beb960e01b815260048101829052602401610350565b60008060005b838110156126885760006125f56125df8a84613418565b60c58111156125f0576125f0615221565b613439565b111561263f57848110612634576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600190920191612680565b84811015612679576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b6001016125c8565b508382146126ac57604051635318beb960e01b815260048101839052602401610350565b8481146115df57604051635318beb960e01b815260048101829052602401610350565b60006126dc868686613499565b905060006126ea84846134cf565b905060006126f885856134ec565b60408051600180825281830190925291925060009190602080830190803683370190505090508981600081518110612732576127326151f1565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526127c79061279e9061503d565b828686867e60030220202000000000000000000000000000000000000000000000000000612ae7565b50505050505050505050565b61044685856127e28487613501565b8561353c565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201526000602282018190527f756e6c696d6974656400000000000000000000000000000000000000000000006030830152910160405160208183030381529060405261285b9061503d565b909114919050565b600061289061287286866137b8565b60ff858116601b0360080285901c1661288b8587613501565b61380e565b95945050505050565b60006128a48361385f565b80156128b557506128b583836138a0565b9392505050565b6000606060006128cb86613958565b905060005b81518110156129a85760008282815181106128ed576128ed6151f1565b602002602001015190506129196001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612995576040517fc3323031000000000000000000000000000000000000000000000000000000008152606082901c9063c332303190612962908c908c908c90600401615237565b600060405180830381600087803b15801561297c57600080fd5b505af1158015612990573d6000803e3d6000fd5b505050505b50806129a081615207565b9150506128d0565b506129b587858888613a3f565b909350915060005b8151811015612a955760008282815181106129da576129da6151f1565b60200260200101519050612a066002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612a82576040517f973d8f99000000000000000000000000000000000000000000000000000000008152606082901c9063973d8f9990612a4f908c908c908c90600401615237565b600060405180830381600087803b158015612a6957600080fd5b505af1158015612a7d573d6000803e3d6000fd5b505050505b5080612a8d81615207565b9150506129bd565b505094509492505050565b805160208201fd5b60608282604051602001612ad09291909182526001600160e01b031916602082015260240190565b604051602081830303815290604052905092915050565b611bdd60f21b866001600160f01b03191603612b4057857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a986868686604051612b33949392919061529a565b60405180910390a2610729565b6000612b4b87613b1e565b905060005b8151811015612c2e576000828281518110612b6d57612b6d6151f1565b60200260200101519050612b996001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612c1b576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90612be8908c908c908c908c908c908c906004016152d9565b600060405180830381600087803b158015612c0257600080fd5b505af1158015612c16573d6000803e3d6000fd5b505050505b5080612c2681615207565b915050612b50565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051612c65949392919061529a565b60405180910390a26000612c7988886137b8565b90506000602087019050612c91826000895184613bb9565b6000612c9c856133c9565b1115612d20576000612cae8a8a613c79565b878155905060208601915060008060005b612cc8886133c9565b8160ff161015612d1b57612cdd8d8d83613ccf565b9250612cf88a8260ff166028026038011c64ffffffffff1690565b9150612d078360008488613bb9565b612d1182866150e8565b9450600101612cbf565b505050505b60005b83518110156127c7576000848281518110612d4057612d406151f1565b60200260200101519050612d6c6002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612dee576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90612dbb908e908e908e908e908e908e906004016152d9565b600060405180830381600087803b158015612dd557600080fd5b505af1158015612de9573d6000803e3d6000fd5b505050505b5080612df981615207565b915050612d23565b60006102ca8251603881901b1790565b606081604051602001612e249190615332565b6040516020818303038152906040529050919050565b611bdd60f21b836001600160f01b03191603612e8d57827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0783604051612e80919061534e565b60405180910390a2505050565b6000612e9884613b1e565b905060005b8151811015612f75576000828281518110612eba57612eba6151f1565b60200260200101519050612ee66040826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612f62576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf4590612f2f90899089908990600401615361565b600060405180830381600087803b158015612f4957600080fd5b505af1158015612f5d573d6000803e3d6000fd5b505050505b5080612f6d81615207565b915050612e9d565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0784604051612fa6919061534e565b60405180910390a26000612fba85856137b8565b9050613013816000612fcb86613d4f565b67ffffffffffffffff811115612fe357612fe3614be9565b6040519080825280601f01601f19166020018201604052801561300d576020820181803683370190505b50613d72565b600061301e846133c9565b111561303f5760006130308686613c79565b905061303d816020613d88565b505b60005b825181101561072957600083828151811061305f5761305f6151f1565b6020026020010151905061308b6080826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613107576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b906130d4908a908a908a90600401615361565b600060405180830381600087803b1580156130ee57600080fd5b505af1158015613102573d6000803e3d6000fd5b505050505b508061311281615207565b915050613042565b604051606083811b6bffffffffffffffffffffffff1916602083015282151560f81b603483015290603501612ad0565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110613180576131806151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308301526104499101612234565b60006060836001600160a01b031660006131f9858989613dc5565b6040516132069190615332565b60006040518083038185875af1925050503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b606091505b509097909650945050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613290576132906151f1565b60200260200101818152505060006132aa85836000613ddc565b90506128906132bc8260008451613e16565b613ea6565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106132f7576132f76151f1565b602002602001018181525050610b228482600061331386613eb7565b613ec7565b6000613322612293565b9050306001600160a01b038216036133455761334085858585613f02565b610446565b6040517f150f32620000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063150f32629061339090889088908890889060040161538a565b600060405180830381600087803b1580156133aa57600080fd5b505af11580156133be573d6000803e3d6000fd5b505050505050505050565b600060086001806133dc600260206153be565b6133e691906153be565b6133f091906153be565b6133fa91906153d1565b8260ff911c1692915050565b6000600860016133e6600260206153be565b6000601b8290036008028360ff911c1660c58111156128b5576128b5615221565b6000808260c581111561344e5761344e615221565b60ff169050606181101561346857601f1660010192915050565b60618360c581111561347c5761347c615221565b0361348a5750601492915050565b50600092915050565b50919050565b60408051602081018590529081018390526060818101839052906080015b60405160208183030381529060405290509392505050565b8151815160009181810160389190911b1760609190911b176128b5565b60608282604051602001612ad09291906153e8565b600080805b8360ff168110156108255761352860ff601b83900360080287901c16836150e8565b91508061353481615207565b915050613506565b611bdd60f21b846001600160f01b0319160361359357837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161358693929190615417565b60405180910390a2610b22565b600061359f85856137b8565b905060006135ac86613b1e565b905060005b815181101561368b5760008282815181106135ce576135ce6151f1565b602002602001015190506135fa6004826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613678576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90613645908b908b908b908b9060040161544a565b600060405180830381600087803b15801561365f57600080fd5b505af1158015613673573d6000803e3d6000fd5b505050505b508061368381615207565b9150506135b1565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8686866040516136c093929190615417565b60405180910390a26136db828565ffffffffffff1685613d72565b60005b81518110156115df5760008282815181106136fb576136fb6151f1565b602002602001015190506137276008826affffffffffffffffffffff1916613a2190919063ffffffff16565b156137a5576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190613772908b908b908b908b9060040161544a565b600060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050505b50806137b081615207565b9150506136de565b600082826040516020016137cd929190615483565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b60006020821061383457602082048401935060208281613830576138306154be565b0691505b508254600882021b602082900380841115610825576001850154600882021c82179150509392505050565b600061388b827f01ffc9a7000000000000000000000000000000000000000000000000000000006138a0565b80156102ca57506111f3826001600160e01b03195b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613941575060208210155b801561394d5750600081115b979650505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613992576139926151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b730000000000000000000000000000000000000000006030830152600091613a0f91015b604051602081830303815290604052613a079061503d565b836000613ddc565b90506113e96132bc8260008451613e16565b60008160ff1682613a328560581c90565b1660ff1614905092915050565b60006060600080613a4f86613f3d565b90925090506001600160a01b038216613a6c5785610dae87610c83565b80613a7b57613a7b8689614035565b8615613acc577dffffffffffffffffffffffffffff000000000000000000000000000000008616616e7360f01b176000613ab48261404c565b9050613ac982613ac48b846150e8565b6140e6565b50505b6000613ad88760101b90565b71ffffffffffffffffffffffffffffffffffff191614613b0357613afe888884886131de565b613b0f565b613b0f8888848861417a565b90999098509650505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613b5857613b586151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b73000000000000000000000000000000000000000000006030830152600091613a0f91016139ef565b8215613c335760208310613be357602083048401935060208381613bdf57613bdf6154be565b0692505b8215613c335760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411613c24575050610b22565b50600194909401939182900391015b5b60208210613c555780518455600190930192601f1990910190602001613c34565b8115610b22576000600019600884021c198554835182169119161785555050505050565b60008282604051602001613c8e929190615483565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b60008383604051602001613ce4929190615483565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006008613d5f600260206153be565b613d6991906153d1565b9190911c919050565b61044983838351613d838560200190565b613bb9565b60006020613d9783601f6150e8565b613da191906154d4565b613dab90846150e8565b90505b808310156104495760008355600183019250613dae565b60608383836040516020016134b7939291906154f6565b60606113e9613dec858585613ccf565b6000613e1185613dfc89896141db565b9060ff166028026038011c64ffffffffff1690565b6141ee565b6000818311158015613e29575083518211155b613e65578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161035093929190615535565b60208401613e7384826150e8565b90506000613e8185856153be565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006128b58360156000614211565b6060816128b5816015600061428c565b6000613ed385856141db565b90506000613ef0828560ff166028026038011c64ffffffffff1690565b905061072986868660008588886142e0565b6000613f0e85856141db565b90506000613f2b828560ff166028026038011c64ffffffffff1690565b905061072986868684600088886142e0565b60408051600180825281830190925260009182918291602080830190803683370190505090508381600081518110613f7757613f776151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000908190819061401090613fea9061503d565b857e1502001401000000000000000000000000000000000000000000000000000061469c565b5050602081015160349091015160609190911c9860f89190911c975095505050505050565b61403f82826147a4565b6102eb57610bea82610c83565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110614085576140856151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e63657300000000000000000000000000000000000000000000000060308301526000916113e99101611790565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061411c5761411c6151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e6365730000000000000000000000000000000000000000000000006030830152610449910161117b565b60006060836001600160a01b0316614193848888613dc5565b6040516141a09190615332565b600060405180830381855af49150503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b60006128b56141ea8484613c79565b5490565b60405160208101601f19603f8484010116604052828252610825858585846147e7565b6060600061421f8560801c90565b90506fffffffffffffffffffffffffffffffff85166000858281614245576142456154be565b04905060405193506020840160208202810160405281855260005b82811015614280578451871c825293870193602090910190600101614260565b50505050509392505050565b8251606090600061429d85836153d1565b9050604051925060208301601f19603f83860101166040528184526000602088015b84821015614280578051871b835291870191600191909101906020016142bf565b613a3160f11b876001600160f01b0319161461431057613a3160f11b8788604051602001610e2f91815260200190565b600061432b828760ff166028026038011c64ffffffffff1690565b9050600083518564ffffffffff168361434491906153be565b61434e91906150e8565b9050808214158015614370575081614366868861555a565b64ffffffffff1614155b156143c0576040517fa65010b400000000000000000000000000000000000000000000000000000000815264ffffffffff8088166004830152808716602483015283166044820152606401610350565b818664ffffffffff161115614411576040517f7e8578d30000000000000000000000000000000000000000000000000000000081526004810183905264ffffffffff87166024820152604401610350565b600061441e8489846148b6565b9050600061442b8b613b1e565b905060005b815181101561450057600082828151811061444d5761444d6151f1565b602002602001015190506144796010826affffffffffffffffffffff1916613a2190919063ffffffff16565b156144ed57606081901c6001600160a01b03166355eb5a288e8e8e8e8e8d8f6040518863ffffffff1660e01b81526004016144ba979695949392919061557f565b600060405180830381600087803b1580156144d457600080fd5b505af11580156144e8573d6000803e3d6000fd5b505050505b50806144f881615207565b915050614430565b5064ffffffffff881660005b8a60ff168160ff16101561453f57614533878260ff166028026038011c64ffffffffff1690565b9091019060010161450c565b508b7faa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b48c838b878c6040516145789594939291906155dd565b60405180910390a2508284146145995760006145948c8c613c79565b839055505b60006145a68c8c8c613ccf565b90506145ba818a64ffffffffff1689613d72565b5060005b815181101561468e5760008282815181106145db576145db6151f1565b602002602001015190506146076020826affffffffffffffffffffff1916613a2190919063ffffffff16565b1561467b57606081901c6001600160a01b031663635845338e8e8e8e8e8a8f6040518863ffffffff1660e01b8152600401614648979695949392919061557f565b600060405180830381600087803b15801561466257600080fd5b505af1158015614676573d6000803e3d6000fd5b505050505b508061468681615207565b9150506145be565b505050505050505050505050565b60606000606060006146ad85613d4f565b90506146ba878783614984565b935060006146c7866133c9565b90508015614799576146d988886141db565b935066ffffffffffffff841667ffffffffffffffff8111156146fd576146fd614be9565b6040519080825280601f01601f191660200182016040528015614727576020820181803683370190505b5092506020830160005b828160ff1610156147965760006147498b8b84613ccf565b90506000614766888460ff166028026038011c64ffffffffff1690565b905061477582600083876147e7565b61477f81856150e8565b93505050808061478e9061562f565b915050614731565b50505b505093509350939050565b60006147d7616e7360f01b7dffffffffffffffffffffffffffff00000000000000000000000000000000851617836149bd565b806128b557506128b583836149bd565b821561487057602083106148115760208304840193506020838161480d5761480d6154be565b0692505b82156148705760208390036000818410156148355750600019600884021c19614840565b50600019600882021c195b8554600886021b811984511682821617845250818411614861575050610b22565b50600194909401939182900391015b5b602082106148925783548152600190930192601f1990910190602001614871565b8115610b22576000600019600884021c198251865482169119161782525050505050565b600064ffffffffff8211156148fa576040517f4767058800000000000000000000000000000000000000000000000000000000815260048101839052602401610350565b8366ffffffffffffff811660ff851660280260380182901c64ffffffffff1680851061492c5780850382019150614934565b848103820391505b5064ffffffffff6038602860ff8816020181811b197fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009490941690921792909216918416901b1790509392505050565b6060816000036149a357506040805160208101909152600081526128b5565b60006149af85856137b8565b9050612890816000856141ee565b6040805160028082526060820183526000928392919060208301908036833701905050905083816000815181106149f6576149f66151f1565b602002602001018181525050826001600160a01b031660001b81600181518110614a2257614a226151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152600091614a839101612030565b90506128908160f81c90565b80356001600160e01b0319811681146122cd57600080fd5b600060208284031215614ab957600080fd5b6128b582614a8f565b6001600160a01b0381168114610a5b57600080fd5b60008060408385031215614aea57600080fd5b823591506020830135614afc81614ac2565b809150509250929050565b60008083601f840112614b1957600080fd5b50813567ffffffffffffffff811115614b3157600080fd5b6020830191508360208260051b8501011115614b4c57600080fd5b9250929050565b60008060008060008060008060c0898b031215614b6f57600080fd5b88359750602089013596506040890135955060608901359450608089013567ffffffffffffffff80821115614ba357600080fd5b614baf8c838d01614b07565b909650945060a08b0135915080821115614bc857600080fd5b50614bd58b828c01614b07565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614c2857614c28614be9565b604052919050565b600082601f830112614c4157600080fd5b813567ffffffffffffffff811115614c5b57614c5b614be9565b614c6e6020601f19601f84011601614bff565b818152846020838601011115614c8357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215614cb557600080fd5b8335614cc081614ac2565b925060208401359150604084013567ffffffffffffffff811115614ce357600080fd5b614cef86828701614c30565b9150509250925092565b60008060408385031215614d0c57600080fd5b82359150602083013567ffffffffffffffff811115614d2a57600080fd5b614d3685828601614c30565b9150509250929050565b600080600060608486031215614d5557600080fd5b833592506020840135614d6781614ac2565b915060408401358015158114614d7c57600080fd5b809150509250925092565b803560ff811681146122cd57600080fd5b600080600060608486031215614dad57600080fd5b833592506020840135614dbf81614ac2565b9150614dcd60408501614d87565b90509250925092565b600080600060608486031215614deb57600080fd5b83359250602084013567ffffffffffffffff811115614e0957600080fd5b614e1586828701614c30565b925050614dcd60408501614a8f565b60008060408385031215614e3757600080fd5b8235614e4281614ac2565b9150602083013567ffffffffffffffff811115614d2a57600080fd5b600060208284031215614e7057600080fd5b5035919050565b600080600060608486031215614e8c57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614ce357600080fd5b60005b83811015614ecc578181015183820152602001614eb4565b50506000910152565b60008151808452614eed816020860160208601614eb1565b601f01601f19169290920160200192915050565b8281526040602082015260006113e96040830184614ed5565b600067ffffffffffffffff80841115614f3557614f35614be9565b8360051b6020614f46818301614bff565b868152918501918181019036841115614f5e57600080fd5b865b84811015614f9257803586811115614f785760008081fd5b614f8436828b01614c30565b845250918301918301614f60565b50979650505050505050565b60008451614fb0818460208901614eb1565b80830190507f5f000000000000000000000000000000000000000000000000000000000000008082528551614fec816001850160208a01614eb1565b60019201918201528351615007816002840160208801614eb1565b0160020195945050505050565b6001600160f01b0319841681528260208201526060604082015260006128906060830184614ed5565b805160208083015191908110156134935760001960209190910360031b1b16919050565b6020815260006128b56020830184614ed5565b60006020828403121561508657600080fd5b81516fffffffffffffffffffffffffffffffff19811681146128b557600080fd5b6040815260006150ba6040830185614ed5565b90506001600160a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102ca576102ca6150d2565b6001600160f01b03198416815260007f3a000000000000000000000000000000000000000000000000000000000000008060028401528451615144816003860160208901614eb1565b808401905081600382015284519150615164826004830160208801614eb1565b0160040195945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156151e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526151d2858351614ed5565b94509285019290850190600101615198565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600019820361521a5761521a6150d2565b5060010190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03841681528260208201526060604082015260006128906060830184614ed5565b600081518084526020808501945080840160005b8381101561528f57815187529582019590820190600101615273565b509495945050505050565b6080815260006152ad608083018761525f565b82810360208401526152bf8187614ed5565b9050846040840152828103606084015261394d8185614ed5565b86815260c0602082015260006152f260c083018861525f565b82810360408401526153048188614ed5565b9050856060840152828103608084015261531e8186614ed5565b9150508260a0830152979650505050505050565b60008251615344818460208701614eb1565b9190910192915050565b6020815260006128b5602083018461525f565b83815260606020820152600061537a606083018561525f565b9050826040830152949350505050565b8481526080602082015260006153a3608083018661525f565b60ff85166040840152828103606084015261394d8185614ed5565b818103818111156102ca576102ca6150d2565b80820281158282048414176102ca576102ca6150d2565b600083516153fa818460208801614eb1565b83519083019061540e818360208801614eb1565b01949350505050565b60608152600061542a606083018661525f565b65ffffffffffff8516602084015282810360408401526113538185614ed5565b848152608060208201526000615463608083018661525f565b65ffffffffffff85166040840152828103606084015261394d8185614ed5565b82815260006020808301845182860160005b828110156154b157815184529284019290840190600101615495565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826154f157634e487b7160e01b600052601260045260246000fd5b500490565b60008451615508818460208901614eb1565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b6060815260006155486060830186614ed5565b60208301949094525060400152919050565b64ffffffffff818116838216019080821115615578576155786150d2565b5092915050565b87815260e06020820152600061559860e083018961525f565b60ff8816604084015264ffffffffff87811660608501528616608084015260a0830185905282810360c08401526155cf8185614ed5565b9a9950505050505050505050565b60a0815260006155f060a083018861525f565b65ffffffffffff8716602084015264ffffffffff8616604084015284606084015282810360808401526156238185614ed5565b98975050505050505050565b600060ff821660ff8103615645576156456150d2565b6001019291505056fea164736f6c6343000815000a6101006040523480156200001257600080fd5b5060405162004c6d38038062004c6d833981016040819052620000359162000071565b6001600160a01b0393841660805291831660a052821660c0521660e052620000d9565b6001600160a01b03811681146200006e57600080fd5b50565b600080600080608085870312156200008857600080fd5b8451620000958162000058565b6020860151909450620000a88162000058565b6040860151909350620000bb8162000058565b6060860151909250620000ce8162000058565b939692955090935050565b60805160a05160c05160e051614b4c62000121600039600081816106a20152818161159201526116210152600061063a015260006105d2015260006105510152614b4c6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806317d7de7c1161005b57806317d7de7c146100ec57806345ec93541461011a5780637c5b03351461012d578063e1af802c1461014057600080fd5b806301ffc9a714610082578063119df25f146100aa57806313861fb5146100d7575b600080fd5b610095610090366004614310565b610148565b60405190151581526020015b60405180910390f35b6100b261022d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100ea6100e5366004614368565b61023c565b005b6040517f636f72650000000000000000000000000000000000000000000000000000000081526020016100a1565b604051601f1936013581526020016100a1565b6100ea61013b366004614368565b61026e565b6100b2610289565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780ac2fc0000000000000000000000000000000000000000000000000000000014806101db57507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b8061022757507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000610237610293565b905090565b6040517fea8b184c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102766102c5565b61027e61050f565b6102866106c8565b50565b6000610237610bcb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102c25750335b90565b6102cd610c17565b6102d5610c2f565b6102dd610cd4565b6102e5610d5c565b6102ed610dfc565b6102f5610e84565b6102fd610f04565b610305610f8c565b61030d61102c565b6103156110cc565b61031d61116a565b610325611208565b60408051616e7360f01b6020820152600060228201819052603082015261036791015b60405160208183030381529060405261036090614419565b6001611290565b60408051616e7360f01b602082015260006022820181905260308201526103af91015b6040516020818303038152906040526103a290614419565b6103aa61022d565b611375565b60408051616e7360f01b602082015260006022820181905260308201526103f991015b6040516020818303038152906040526103ea90614419565b6103f261022d565b6001611483565b60408051616e7360f01b60208201526473746f726560d81b6022820152600060308201526104279101610348565b60408051616e7360f01b60208201526473746f726560d81b602282015260006030820152610455910161038a565b60408051616e7360f01b60208201526473746f726560d81b60228201526000603082015261048391016103d2565b60408051616e7360f01b6020820152641ddbdc9b1960da1b6022820152600060308201526104b19101610348565b60408051616e7360f01b6020820152641ddbdc9b1960da1b6022820152600060308201526104df910161038a565b60408051616e7360f01b6020820152641ddbdc9b1960da1b60228201526000603082015261050d91016103d2565b565b6040805161737960f01b6020820152600060228201527f4163636573734d616e6167656d656e74000000000000000000000000000000006030820152610590917f000000000000000000000000000000000000000000000000000000000000000091015b60405160208183030381529060405261058b90614419565b611555565b6040805161737960f01b6020820152600060228201527f42616c616e63655472616e73666572000000000000000000000000000000000060308201526105f8917f00000000000000000000000000000000000000000000000000000000000000009101610573565b6040805161737960f01b6020820152600060228201527f426174636843616c6c00000000000000000000000000000000000000000000006030820152610660917f00000000000000000000000000000000000000000000000000000000000000009101610573565b6040805161737960f01b6020820152600060228201527f436f7265526567697374726174696f6e00000000000000000000000000000000603082015261050d917f00000000000000000000000000000000000000000000000000000000000000009101610573565b600060405180606001604052806040518060400160405280601c81526020017f6772616e7441636365737328627974657333322c61646472657373290000000081525081526020016040518060400160405280601d81526020017f7265766f6b6541636365737328627974657333322c61646472657373290000008152508152602001604051806060016040528060228152602001614b1e602291399052905060005b60038110156107fb576040805161737960f01b6020820152600060228201527f4163636573734d616e6167656d656e740000000000000000000000000000000060308201526107e991016040516020818303038152906040526107cd90614419565b8383600381106107df576107df61443d565b6020020151611612565b806107f381614469565b91505061076b565b506040805160a0810182526033918101828152600092829190614ac2606084013981526020016040518060600160405280603181526020016149b7603191399052905060005b60028110156108c8576040805161737960f01b6020820152600060228201527f42616c616e63655472616e73666572000000000000000000000000000000000060308201526108b691015b6040516020818303038152906040526108a490614419565b8383600281106107df576107df61443d565b806108c081614469565b915050610841565b50600060405180604001604052806040518060400160405280601c81526020017f626174636843616c6c2828627974657333322c6279746573295b5d29000000008152508152602001604051806060016040528060288152602001614a43602891399052905060005b6002811015610992576040805161737960f01b6020820152600060228201527f426174636843616c6c00000000000000000000000000000000000000000000006030820152610980910161088c565b8061098a81614469565b915050610931565b50604080516101c081018252601c61018082019081527f696e7374616c6c4d6f64756c6528616464726573732c627974657329000000006101a08301528152815160608101835282815260009260208084019291906149029083013981526020016040518060600160405280602881526020016149e86028913981526020016040518060600160405280602481526020016148de6024913981526020016040518060400160405280601a81526020017f72656769737465724e616d6573706163652862797465733332290000000000008152508152602001604051806060016040528060298152602001614af5602991398152602001604051806060016040528060258152602001614a6b60259139815260200160405180606001604052806024815260200161499360249139815260200160405180606001604052806028815260200161496b602891398152602001604051806060016040528060338152602001614a10603391398152602001604051806060016040528060298152602001614942602991398152602001604051806060016040528060328152602001614a90603291399052905060005b600c811015610bc4576040805161737960f01b6020820152600060228201527f436f7265526567697374726174696f6e000000000000000000000000000000006030820152610bb29101604051602081830303815290604052610ba090614419565b8383600c81106107df576107df61443d565b80610bbc81614469565b915050610b3e565b5050505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610c12573391505090565b919050565b610c1f6116b9565b610c27611759565b61050d6117f7565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610c8f90614419565b7e14010014000000000000000000000000000000000000000000000000000000610cb761187f565b610cbf6118f7565b610cc7611931565b610ccf6119b6565b611a2d565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610d3490614419565b630100080160dd1b610d4461187f565b610d4c611b01565b610d54611931565b610ccf611b3b565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f496e7374616c6c65644d6f64756c657300000000000000000000000000000000603082015261050d9101604051602081830303815290604052610dbc90614419565b7e14010014000000000000000000000000000000000000000000000000000000610de4611bb2565b610dec6118f7565b610df4611c31565b610ccf611cfb565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f5573657244656c65676174696f6e436f00000000000000000000000000000000603082015261050d9101604051602081830303815290604052610e5c90614419565b630100080160dd1b610e6c611d72565b610e7461187f565b610e7c611df1565b610ccf611ebb565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f4e616d65737061636544656c6567617400000000000000000000000000000000603082015261050d9101604051602081830303815290604052610ee490614419565b630100080160dd1b610ef461187f565b610efc61187f565b610e7c611931565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f5265736f75726365416363657373000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610f6490614419565b630101000160d81b610f74611f32565b610f7c611f6c565b610f84611fa6565b610ccf612070565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610fec90614419565b7e1502001401000000000000000000000000000000000000000000000000000061101461187f565b61101c6120e7565b611024612166565b610ccf6121dd565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015261050d910160405160208183030381529060405261108c90614419565b7e240200200400000000000000000000000000000000000000000000000000006110b46122a7565b6110bc6122e1565b6110c4612360565b610ccf6123d7565b60408051611bdd60f21b6020820152641ddbdc9b1960da1b60228201527f46756e6374696f6e5369676e6174757200000000000000000000000000000000603082015261050d910160405160208183030381529060405261112c90614419565b7c01000000000000000000000000000000000000000000000000000000006111526122a7565b61115a6124a1565b611162612360565b610ccf6124db565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d486f6f6b73000000000000000000000000000000000000000000603082015261050d91016040516020818303038152906040526111ca90614419565b7c01000000000000000000000000000000000000000000000000000000006111f061187f565b6111f8612552565b611200612166565b610ccf61258c565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d5265676973747279000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261126890614419565b630100080160dd1b6112786118f7565b61128061187f565b611288612603565b610ccf612166565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106112c6576112c661443d565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015261137091015b60405160208183030381529060405261133890614419565b8260008560405160200161135391151560f81b815260010190565b60408051601f19818403018152919052630101000160d81b61267a565b505050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106113ab576113ab61443d565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526113709061141790614419565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e1401001400000000000000000000000000000000000000000000000000000061267a565b60408051600280825260608201835260009260208301908036833701905050905083816000815181106114b8576114b861443d565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106114f1576114f161443d565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f75726365416363657373000000000000000000000000000000000000603083015261154f9101611320565b50505050565b61137061156061022d565b6040516024810184905273ffffffffffffffffffffffffffffffffffffffff85166044820152600160648201526000907f00000000000000000000000000000000000000000000000000000000000000009060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3350b6a90000000000000000000000000000000000000000000000000000000017905261268f565b61137061161d61022d565b60007f00000000000000000000000000000000000000000000000000000000000000008585868051906020012060405160240161165c939291906144d3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f742d61180000000000000000000000000000000000000000000000000000000017905261268f565b60408051613a3160f11b60208201526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261171990614419565b7e6003022020200000000000000000000000000000000000000000000000000061174161187f565b6117496126bc565b61175161280b565b610ccf612882565b60408051613a3160f11b60208201526473746f726560d81b60228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015261050d91016040516020818303038152906040526117b990614419565b7c01000000000000000000000000000000000000000000000000000000006117df61187f565b6117e7612552565b6117ef61280b565b610ccf612a4a565b60408051613a3160f11b60208201526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261185790614419565b630101000160d81b61186761187f565b61186f611f6c565b611877612ac1565b610ccf612b38565b60408051600180825281830190925260009182919060208083019080368337019050509050605f816000815181106118b9576118b961443d565b602002602001019060c58111156118d2576118d261451e565b908160c58111156118e5576118e561451e565b9052506118f181612baf565b91505090565b604080516001808252818301909252600091829190602080830190803683370190505090506061816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816119485790505090506040518060400160405280600b81526020017f6e616d6573706163654964000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b602002602001018190525090565b604080516001808252818301909252606091816020015b60608152602001906001900390816119cd5790505090506040518060400160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6000611a37610bcb565b90503073ffffffffffffffffffffffffffffffffffffffff821603611a6957611a64878787878787612d73565b611af8565b6040517f0ba51f4900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690630ba51f4990611ac5908a908a908a908a908a908a9060040161458c565b600060405180830381600087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050505b50505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050601f816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611b525790505090506040518060400160405280600781526020017f62616c616e636500000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050604f81600081518110611bec57611bec61443d565b602002602001019060c5811115611c0557611c0561451e565b908160c5811115611c1857611c1861451e565b81525050605f816001815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611c475790505090506040518060400160405280600a81526020017f6d6f64756c654e616d650000000000000000000000000000000000000000000081525081600081518110611ca757611ca761443d565b60200260200101819052506040518060400160405280600d81526020017f617267756d656e74734861736800000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611d125790505090506040518060400160405280600d81526020017f6d6f64756c654164647265737300000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050606181600081518110611dac57611dac61443d565b602002602001019060c5811115611dc557611dc561451e565b908160c5811115611dd857611dd861451e565b815250506061816001815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611e075790505090506040518060400160405280600981526020017f64656c656761746f72000000000000000000000000000000000000000000000081525081600081518110611e6757611e6761443d565b60200260200101819052506040518060400160405280600981526020017f64656c6567617465650000000000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611ed25790505090506040518060400160405280601381526020017f64656c65676174696f6e436f6e74726f6c496400000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050605f81600081518110611dac57611dac61443d565b604080516001808252818301909252600091829190602080830190803683370190505090506060816000815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611fbc5790505090506040518060400160405280600a81526020017f7265736f757263654964000000000000000000000000000000000000000000008152508160008151811061201c5761201c61443d565b60200260200101819052506040518060400160405280600681526020017f63616c6c65720000000000000000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816120875790505090506040518060400160405280600681526020017f6163636573730000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516002808252606082018352600092839291906020830190803683370190505090506061816000815181106121215761212161443d565b602002602001019060c581111561213a5761213a61451e565b908160c581111561214d5761214d61451e565b815250506060816001815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b606081526020019060019003908161217d5790505090506040518060400160405280600881526020017f73797374656d4964000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160028082526060828101909352816020015b60608152602001906001900390816121f35790505090506040518060400160405280600681526020017f73797374656d0000000000000000000000000000000000000000000000000000815250816000815181106122535761225361443d565b60200260200101819052506040518060400160405280600c81526020017f7075626c69634163636573730000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252600091829190602080830190803683370190505090506043816000815181106118b9576118b961443d565b60408051600280825260608201835260009283929190602083019080368337019050509050605f8160008151811061231b5761231b61443d565b602002602001019060c58111156123345761233461451e565b908160c58111156123475761234761451e565b815250506043816001815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816123775790505090506040518060400160405280601081526020017f66756e6374696f6e53656c6563746f7200000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160028082526060828101909352816020015b60608152602001906001900390816123ed5790505090506040518060400160405280600881526020017f73797374656d49640000000000000000000000000000000000000000000000008152508160008151811061244d5761244d61443d565b60200260200101819052506040518060400160405280601681526020017f73797374656d46756e6374696f6e53656c6563746f7200000000000000000000815250816001815181106119a8576119a861443d565b6040805160018082528183019092526000918291906020808301908036833701905050905060c5816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816124f25790505090506040518060400160405280601181526020017f66756e6374696f6e5369676e6174757265000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160018082528183019092526000918291906020808301908036833701905050905060b6816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816125a35790505090506040518060400160405280600581526020017f76616c7565000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b606081526020019060019003908161261a5790505090506040518060400160405280600681526020017f73797374656d0000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b610bc48585612689848761304b565b8561308e565b60606000806126a087878787613322565b91509150816126b2576126b2816133a3565b9695505050505050565b60408051600580825260c082019092526000918291906020820160a080368337019050509050605f816000815181106126f7576126f761443d565b602002602001019060c58111156127105761271061451e565b908160c58111156127235761272361451e565b81525050605f8160018151811061273c5761273c61443d565b602002602001019060c58111156127555761275561451e565b908160c58111156127685761276861451e565b81525050605f816002815181106127815761278161443d565b602002602001019060c581111561279a5761279a61451e565b908160c58111156127ad576127ad61451e565b8152505060c4816003815181106127c6576127c661443d565b602002602001019060c58111156127df576127df61451e565b908160c58111156127f2576127f261451e565b8152505060c4816004815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816128225790505090506040518060400160405280600781526020017f7461626c65496400000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600580825260c08201909252606091816020015b606081526020019060019003908161289a5790505090506040518060400160405280600b81526020017f6669656c644c61796f7574000000000000000000000000000000000000000000815250816000815181106128fa576128fa61443d565b60200260200101819052506040518060400160405280600981526020017f6b6579536368656d6100000000000000000000000000000000000000000000008152508160018151811061294e5761294e61443d565b60200260200101819052506040518060400160405280600b81526020017f76616c7565536368656d61000000000000000000000000000000000000000000815250816002815181106129a2576129a261443d565b60200260200101819052506040518060400160405280601281526020017f616269456e636f6465644b65794e616d65730000000000000000000000000000815250816003815181106129f6576129f661443d565b60200260200101819052506040518060400160405280601481526020017f616269456e636f6465644669656c644e616d6573000000000000000000000000815250816004815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612a615790505090506040518060400160405280600581526020017f686f6f6b73000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612ad85790505090506040518060400160405280600a81526020017f7265736f75726365496400000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612b4f5790505090506040518060400160405280600681526020017f6578697374730000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6000601c82511115612be2578151604051635318beb960e01b8152600401612bd991815260200190565b60405180910390fd5b60008080805b8551811015612cbd576000612c26878381518110612c0857612c0861443d565b602002602001015160c5811115612c2157612c2161451e565b6133ab565b905080600003612c3b57600190920191612c73565b8215612c73576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80840193506008826004601f030302878381518110612c9457612c9461443d565b602002602001015160c5811115612cad57612cad61451e565b901b949094179350600101612be8565b506005811115612ce357604051635318beb960e01b815260048101829052602401612bd9565b84518190036008612cf6600260206145d6565b612d0091906145e9565b83901b939093179260086001612d18600260206145d6565b612d2291906145d6565b612d2c91906145e9565b81901b93909317926008600180612d45600260206145d6565b612d4f91906145d6565b612d5991906145d6565b612d6391906145e9565b9190911b92909217949350505050565b613a3160f11b867fffff0000000000000000000000000000000000000000000000000000000000001614801590612dd15750611bdd60f21b867fffff0000000000000000000000000000000000000000000000000000000000001614155b15612e3257613a3160f11b8687604051602001612df091815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252612bd9939291600401614600565b612e3b8561340b565b612e4684600161358c565b612e5183600061358c565b60e084901c60e885901c0160ff16825114612eb15760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b60e085901c60e886901c0160ff16815114612f115760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff1614612f895760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b612f9286613733565b15612fec578586604051602001612fab91815260200190565b60408051601f19818403018152908290527fdfaaf9cf000000000000000000000000000000000000000000000000000000008252612bd99291600401614641565b6130388686868686604051602001613004919061465a565b60405160208183030381529060405286604051602001613024919061465a565b6040516020818303038152906040526137ff565b613043866001611290565b505050505050565b600080805b8360ff168110156130865761307260ff601b83900360080287901c168361466d565b91508061307e81614469565b915050613050565b509392505050565b611bdd60f21b847fffff00000000000000000000000000000000000000000000000000000000000016036130fd57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8484846040516130f0939291906146bb565b60405180910390a261154f565b60006131098585613903565b9050600061311686613959565b905060005b81518110156131f55760008282815181106131385761313861443d565b602002602001015190506131646004826affffffffffffffffffffff1916613a2190919063ffffffff16565b156131e2576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d906131af908b908b908b908b906004016146ee565b600060405180830381600087803b1580156131c957600080fd5b505af11580156131dd573d6000803e3d6000fd5b505050505b50806131ed81614469565b91505061311b565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be86868660405161322a939291906146bb565b60405180910390a2613245828565ffffffffffff1685613a3f565b60005b8151811015611af85760008282815181106132655761326561443d565b602002602001015190506132916008826affffffffffffffffffffff1916613a2190919063ffffffff16565b1561330f576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba8721906132dc908b908b908b908b906004016146ee565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505b508061331a81614469565b915050613248565b600060608373ffffffffffffffffffffffffffffffffffffffff16613348848888613a55565b6040516133559190614732565b600060405180830381855af49150503d8060008114613390576040519150601f19603f3d011682016040523d82523d6000602084013e613395565b606091505b509097909650945050505050565b805160208201fd5b6000808260c58111156133c0576133c061451e565b60ff16905060618110156133da57601f1660010192915050565b60618360c58111156133ee576133ee61451e565b036133fc5750601492915050565b50600092915050565b50919050565b80613442576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344d82613a84565b90506005811115613494576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401612bd9565b600061349f83613ac1565b905060006134ad838361466d565b9050601c8111156134f4576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401612bd9565b60005b82811015610bc45760ff601b82900360080286901c166000819003613548576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020811115613583576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016134f7565b80158015613598575081155b156135b957604051635318beb960e01b815260006004820152602401612bd9565b60006135c483613a84565b905060058111156135eb57604051635318beb960e01b815260048101829052602401612bd9565b60006135f684613ac1565b90506000613604838361466d565b9050601c81111561362b57604051635318beb960e01b815260048101829052602401612bd9565b60008060005b838110156136ec5760006136596136488a84613ad3565b60c5811115612c2157612c2161451e565b11156136a357848110613698576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909201916136e4565b848110156136dd576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b600101613631565b5083821461371057604051635318beb960e01b815260048101839052602401612bd9565b848114611af857604051635318beb960e01b815260048101829052602401612bd9565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061376c5761376c61443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526000906137eb906137db90614419565b836000630101000160d81b613afb565b90506137f78160f81c90565b949350505050565b600061380c868686613b31565b9050600061381a8484613b53565b905060006138288585613b70565b604080516001808252818301909252919250600091906020808301908036833701905050905089816000815181106138625761386261443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526138f7906138ce90614419565b828686867e60030220202000000000000000000000000000000000000000000000000000613b9c565b50505050505050505050565b6000828260405160200161391892919061474e565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106139935761399361443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090613a0a90613a0290614419565b836000613ece565b90506137f7613a1c8260008451613f08565b613f98565b60008160ff1682613a328560581c90565b1660ff1614905092915050565b61137083838351613a508560200190565b613fa9565b6060838383604051602001613a6c93929190614789565b60405160208183030381529060405290509392505050565b60006008600180613a97600260206145d6565b613aa191906145d6565b613aab91906145d6565b613ab591906145e9565b8260ff911c1692915050565b600060086001613aa1600260206145d6565b6000601b8290036008028360ff911c1660c5811115613af457613af461451e565b9392505050565b6000613b28613b0a8686613903565b60ff858116601b0360080285901c16613b23858761304b565b614069565b95945050505050565b6040805160208101859052908101839052606081810183905290608001613a6c565b8151815160009181810160389190911b1760609190911b17613af4565b60608282604051602001613b859291906147db565b604051602081830303815290604052905092915050565b611bdd60f21b867fffff0000000000000000000000000000000000000000000000000000000000001603613c0d57857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a986868686604051613c00949392919061480a565b60405180910390a2613043565b6000613c1887613959565b905060005b8151811015613cfb576000828281518110613c3a57613c3a61443d565b60200260200101519050613c666001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613ce8576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90613cb5908c908c908c908c908c908c90600401614849565b600060405180830381600087803b158015613ccf57600080fd5b505af1158015613ce3573d6000803e3d6000fd5b505050505b5080613cf381614469565b915050613c1d565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051613d32949392919061480a565b60405180910390a26000613d468888613903565b90506000602087019050613d5e826000895184613fa9565b6000613d6985613a84565b1115613ded576000613d7b8a8a6140ba565b878155905060208601915060008060005b613d9588613a84565b8160ff161015613de857613daa8d8d83614110565b9250613dc58a8260ff166028026038011c64ffffffffff1690565b9150613dd48360008488613fa9565b613dde828661466d565b9450600101613d8c565b505050505b60005b83518110156138f7576000848281518110613e0d57613e0d61443d565b60200260200101519050613e396002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613ebb576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90613e88908e908e908e908e908e908e90600401614849565b600060405180830381600087803b158015613ea257600080fd5b505af1158015613eb6573d6000803e3d6000fd5b505050505b5080613ec681614469565b915050613df0565b60606137f7613ede858585614110565b6000613f0385613eee8989614190565b9060ff166028026038011c64ffffffffff1690565b6141a3565b6000818311158015613f1b575083518211155b613f57578383836040517f23230fa3000000000000000000000000000000000000000000000000000000008152600401612bd9939291906148a2565b60208401613f65848261466d565b90506000613f7385856145d6565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000613af483601560006141c6565b82156140235760208310613fd357602083048401935060208381613fcf57613fcf6148c7565b0692505b82156140235760208390036000600019600885021c1990506008850281811c91508351811c905081198754168282161787555081841161401457505061154f565b50600194909401939182900391015b5b602082106140455780518455600190930192601f1990910190602001614024565b811561154f576000600019600884021c198554835182169119161785555050505050565b60006020821061408f5760208204840193506020828161408b5761408b6148c7565b0691505b508254600882021b602082900380841115613086576001850154600882021c82179150509392505050565b600082826040516020016140cf92919061474e565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000838360405160200161412592919061474e565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b6000613af461419f84846140ba565b5490565b60405160208101601f19603f848401011660405282825261308685858584614241565b606060006141d48560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816141fa576141fa6148c7565b04905060405193506020840160208202810160405281855260005b82811015614235578451871c825293870193602090910190600101614215565b50505050509392505050565b82156142ca576020831061426b57602083048401935060208381614267576142676148c7565b0692505b82156142ca57602083900360008184101561428f5750600019600884021c1961429a565b50600019600882021c195b8554600886021b8119845116828216178452508184116142bb57505061154f565b50600194909401939182900391015b5b602082106142ec5783548152600190930192601f19909101906020016142cb565b811561154f576000600019600884021c198251865482169119161782525050505050565b60006020828403121561432257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613af457600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561437a57600080fd5b813567ffffffffffffffff8082111561439257600080fd5b818401915084601f8301126143a657600080fd5b8135818111156143b8576143b8614352565b604051601f8201601f19908116603f011681019083821181831017156143e0576143e0614352565b816040528281528760208487010111156143f957600080fd5b826020860160208301376000928101602001929092525095945050505050565b805160208083015191908110156134055760001960209190910360031b1b16919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361447c5761447c614453565b5060010190565b60005b8381101561449e578181015183820152602001614486565b50506000910152565b600081518084526144bf816020860160208601614483565b601f01601f19169290920160200192915050565b8381526060602082015260006144ec60608301856144a7565b90507fffffffff0000000000000000000000000000000000000000000000000000000083166040830152949350505050565b634e487b7160e01b600052602160045260246000fd5b600082825180855260208086019550808260051b84010181860160005b8481101561457f57601f1986840301895261456d8383516144a7565b98840198925090830190600101614551565b5090979650505050505050565b86815285602082015284604082015283606082015260c0608082015260006145b760c0830185614534565b82810360a08401526145c98185614534565b9998505050505050505050565b8181038181111561022757610227614453565b808202811582820484141761022757610227614453565b7fffff00000000000000000000000000000000000000000000000000000000000084168152826020820152606060408201526000613b2860608301846144a7565b8281526040602082015260006137f760408301846144a7565b602081526000613af46020830184614534565b8082018082111561022757610227614453565b600081518084526020808501945080840160005b838110156146b057815187529582019590820190600101614694565b509495945050505050565b6060815260006146ce6060830186614680565b65ffffffffffff8516602084015282810360408401526126b281856144a7565b8481526080602082015260006147076080830186614680565b65ffffffffffff85166040840152828103606084015261472781856144a7565b979650505050505050565b60008251614744818460208701614483565b9190910192915050565b82815260006020808301845182860160005b8281101561477c57815184529284019290840190600101614760565b5091979650505050505050565b6000845161479b818460208901614483565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600083516147ed818460208801614483565b835190830190614801818360208801614483565b01949350505050565b60808152600061481d6080830187614680565b828103602084015261482f81876144a7565b9050846040840152828103606084015261472781856144a7565b86815260c06020820152600061486260c0830188614680565b828103604084015261487481886144a7565b9050856060840152828103608084015261488e81866144a7565b9150508260a0830152979650505050505050565b6060815260006148b560608301866144a7565b60208301949094525060400152919050565b634e487b7160e01b600052601260045260246000fdfe756e726567697374657253746f7265486f6f6b28627974657333322c616464726573732972656769737465725461626c6528627974657333322c627974657333322c627974657333322c627974657333322c737472696e675b5d2c737472696e675b5d29726567697374657244656c65676174696f6e28616464726573732c627974657333322c627974657329726567697374657246756e6374696f6e53656c6563746f7228627974657333322c737472696e6729726567697374657253797374656d28627974657333322c616464726573732c626f6f6c297472616e7366657242616c616e6365546f4164647265737328627974657333322c616464726573732c75696e7432353629726567697374657253746f7265486f6f6b28627974657333322c616464726573732c75696e7438297265676973746572526f6f7446756e6374696f6e53656c6563746f7228627974657333322c737472696e672c62797465733429626174636843616c6c46726f6d2828616464726573732c627974657333322c6279746573295b5d29756e726567697374657253797374656d486f6f6b28627974657333322c616464726573732972656769737465724e616d65737061636544656c65676174696f6e28627974657333322c627974657333322c6279746573297472616e7366657242616c616e6365546f4e616d65737061636528627974657333322c627974657333322c75696e7432353629726567697374657253797374656d486f6f6b28627974657333322c616464726573732c75696e7438297472616e736665724f776e65727368697028627974657333322c6164647265737329a164736f6c6343000815000aa164736f6c6343000815000a","sourceMap":"1671:1949:198:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3497:121;;;:::i;:::-;;1999:117;;;:::i;2170:134:107:-;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3251:242:198;;;:::i;2939:133:107:-;;;:::i;2640:141::-;;;:::i;2456:178::-;;;:::i;:::-;;;;;;;:::i;2310:140::-;;;:::i;:::-;;;;;;;:::i;2787:146::-;;;:::i;1875:141::-;;;:::i;1819:584:101:-;;;:::i;:::-;;;4024:14:203;;4017:22;3999:41;;3987:2;3972:18;1819:584:101;3859:187:203;3140:107:198;;;:::i;2022:142:107:-;;;:::i;2902:234:198:-;;;:::i;1572:26:101:-;;;;;;;;;3497:121:198;3545:18;:16;:18::i;:::-;3579:6;;:18;;;;;;;;3570:43;;-1:-1:-1;;;;;3579:6:198;;:16;;:18;;;;;;;;;;;;;;:6;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3607:4;3570:8;:43::i;:::-;3497:121::o;1999:117::-;2056:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2029:5:198;:40;;;;-1:-1:-1;;;;;2029:40:198;;;;;;;;;2075:16;2092:18;:16;:18::i;:::-;2075:36;;;;;;;;;;-1:-1:-1;;;;;4650:55:203;;;2075:36:198;;;4632:74:203;4605:18;;2075:36:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1999:117::o;2170:134:107:-;2217:33;2281:16;2262:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2262:35:107;;;;;;;;;;;;;;;;;;;;;;;2170:134;:::o;3251:242:198:-;3296:18;:16;:18::i;:::-;3321:37;;;;;3335:4;3321:37;;;4924:41:203;;;4981:18;;;4974:50;;;5040:18;;;5033:50;;;5099:18;;;5092:50;3321:13:198;;;;4896:19:203;;3321:37:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3369:20;;;;;5355:2:203;5337:21;;;5394:2;5374:18;;;5367:30;5433:13;5428:2;5413:18;;5406:41;5479:2;5464:18;;5153:335;3369:20:198;;;;;;;;3418:6;;:33;;;;;5355:2:203;3418:33:198;;;5337:21:203;5394:2;5374:18;;;5367:30;5433:13;5413:18;;;5406:41;3395:20:198;;-1:-1:-1;;;;;3418:6:198;;:18;;5464::203;;3418:33:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3418:33:198;;;;;;;;;;;;:::i;:::-;3395:56;;3457:31;3466:6;3457:31;;;;;;;;;;;;;;;;;:8;:31::i;:::-;3290:203;3251:242::o;2939:133:107:-;2985:33;3049:16;3030:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3030:35:107;;;;;;;;;;;;;;;;;;;;;;2939:133;:::o;2640:141::-;2688:35;2756:18;2735:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2735:39:107;;;;;;;;;;;;;;;;;;;;;;2640:141;:::o;2456:178::-;2512:48;2601:26;2572:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2572:55:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2456:178;:::o;2310:140::-;2358:34;2425:18;2404:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:146;2835:40;2908:18;2887:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2887:39:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1875:141;1924:34;1991:18;1970:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:584:101;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:101;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;7441:74:203;;;2221:17:101;7531:18:203;;;7524:34;2196:43:101;;;;;;;;;7414:18:203;;;2196:43:101;;;-1:-1:-1;;1671:64:101;;2086:175;;2135:34;;2086:175;;;:::i;:::-;;;;-1:-1:-1;;2086:175:101;;;;;;;;;;2047:232;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;:::i;:::-;2297:42;;2002:352;1980:374;2374:12;1819:584;-1:-1:-1;1819:584:101:o;3140:107:198:-;3178:14;:12;:14::i;2022:142:107:-;2071:35;2139:18;2118:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:39:107;;;;;;;;;;;;;;;;;;;;;;2022:142;:::o;2902:234:198:-;2943:14;:12;:14::i;2514:384::-;2557:5;;2581:18;;-1:-1:-1;;;;;2557:5:198;;;;:23;;2581:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2601:12:198;;;2611:1;2601:12;;;;;;;;;2557:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2650:5:198;;2674:8;;-1:-1:-1;;;;;2650:5:198;;;;-1:-1:-1;2650:23:198;;-1:-1:-1;2674:25:198;;539:36:59;2781:46;816:18:94;2780:74:59;;2669:191;2674:25:198;2650:50;;;;;;;;;;;;;9121:25:203;;9109:2;9094:18;;8944:208;2650:50:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2706:23;2732:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2760:5:198;;2781:8;;2760:44;;;;;;;;9411:25:203;;;;-1:-1:-1;;;;;9472:55:203;;;9452:18;;;9445:83;2760:5:198;9544:18:203;;;9537:50;2706:48:198;;-1:-1:-1;2760:5:198;;;:20;;9384:18:203;;2760:44:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2876:5:198;;2883:8;;2863:29;;-1:-1:-1;;;;;;2876:5:198;;;;-1:-1:-1;2863:12:198;:29::i;:::-;2837:6;:56;;;;-1:-1:-1;;;;;2837:56:198;;;;;;;;;;-1:-1:-1;2514:384:198:o;3622:277:101:-;3690:1;-1:-1:-1;;;;;3685:6:101;:1;-1:-1:-1;;;;;3685:6:101;;3681:212;;3712:44;;;;;9800:2:203;9782:21;;;9839:2;9819:18;;;9812:30;9878:34;9873:2;9858:18;;9851:62;9949:7;9944:2;9929:18;;9922:35;9989:3;9974:19;;9598:401;3712:44:101;;;;;;;;3775:34;3807:1;3775:34;;;;;;:::i;:::-;;;;;;;;3828;3860:1;3828:34;;;;;;:::i;:::-;;;;;;;;3876:6;:4;:6::i;:::-;3622:277;;:::o;514:223:100:-;551:10;600:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;636:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;671:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;700:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;578:156;;;;;:::i;:::-;-1:-1:-1;;;;;11566:15:203;;;11548:34;;11618:15;;;11613:2;11598:18;;11591:43;11670:15;;;11665:2;11650:18;;11643:43;11722:15;;;11717:2;11702:18;;11695:43;11474:3;11459:19;578:156:100;;;;;;;;;;;;;;;;;;;;;;;567:167;;514:223;:::o;17902:344:101:-;18038:1;18021:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;18011:30;;;;;;18004:1;17987:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;17977:30;;;;;;:64;17973:267;;18062:43;;;;;12245:2:203;12227:21;;;12284:2;12264:18;;;12257:30;12323:34;12318:2;12303:18;;12296:62;12394:6;12389:2;12374:18;;12367:34;12433:3;12418:19;;12043:400;18062:43:101;;;;;;;;18124:33;18155:1;18124:33;;;;;;:::i;:::-;;;;;;;;18176;18207:1;18176:33;;;;;;:::i;2120:390:198:-;2159:5;;2179:18;;-1:-1:-1;;;;;2159:5:198;;;;:19;;2179:18;;;:::i;799:322:174:-;790:64:173;;;807:15;790:64;;;13521:92:203;455:17:173;13629:11:203;;;13622:100;835:18:173;13738:12:203;;;13731:101;869:14:174;;-1:-1:-1;;;;;914:10:174;;;;;13848:12:203;790:64:173;;;;;;;;;;;;782:73;;;:::i;:::-;941:60:174;;;;;9121:25:203;;;9094:18;;941:60:174;;;-1:-1:-1;;941:60:174;;;;;;;;;;;;;;;;;;;;914:88;;941:60;914:88;;;;;;;;;941:60;914:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;914:88:174;;;;;;;;;;;;:::i;:::-;898:123;;;;;;;;;;;;:::i;:::-;889:132;-1:-1:-1;;;;;;1025:33:174;;;816:18:94;539:36:59;2781:46;;2780:74;653:67:173;;;670:15;653:67;;;13521:92:203;455:17:173;13629:11:203;;;13622:100;698:21:173;13738:12:203;;;13731:101;13848:12;653:67:173;;;;;;;;;;;;645:76;;;:::i;:::-;1105:12:174;;;1115:1;1105:12;;;;;;;;;1025:93;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:322;;;;:::o;2409:432:101:-;2997:42;2985:55;3066:16;2452:359;;2652:67;;;1671:64;2652:67;;;15914:74:203;;;2677:17:101;16004:18:203;;;15997:34;;;;2712:4:101;16047:18:203;;;16040:34;2489:11:101;;1671:64;2586:43;;15887:18:203;;2652:67:101;;;-1:-1:-1;;2652:67:101;;;;;;;;;;2541:196;;;2652:67;2541:196;;:::i;:::-;;;;-1:-1:-1;;2541:196:101;;;;;;;;;;2506:245;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2452:359:101;2820:7;:14;;;;;;;;2409:432::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:681:203:-;185:2;237:21;;;307:13;;210:18;;;329:22;;;156:4;;185:2;408:15;;;;382:2;367:18;;;156:4;451:218;465:6;462:1;459:13;451:218;;;530:13;;-1:-1:-1;;;;;526:62:203;514:75;;644:15;;;;609:12;;;;487:1;480:9;451:218;;;-1:-1:-1;686:3:203;;14:681;-1:-1:-1;;;;;;14:681:203:o;700:1697::-;904:4;933:2;973;962:9;958:18;1003:2;992:9;985:21;1026:6;1061;1055:13;1092:6;1084;1077:22;1118:2;1108:12;;1151:2;1140:9;1136:18;1129:25;;1213:2;1203:6;1200:1;1196:14;1185:9;1181:30;1177:39;1251:2;1243:6;1239:15;1272:1;1293;1303:1065;1319:6;1314:3;1311:15;1303:1065;;;1388:22;;;-1:-1:-1;;1384:95:203;1372:108;;1503:13;;1590:9;;-1:-1:-1;;;;;1586:58:203;1571:74;;1684:11;;1678:18;1716:15;;;1709:27;;;1797:19;;1543:15;;;1829:24;;;1919:21;;;;1964:1;;1887:2;1875:15;;;1978:282;1994:8;1989:3;1986:17;1978:282;;;2075:15;;2092:66;2071:88;2057:103;;2229:17;;;;2022:1;2013:11;;;;;2186:14;;;;1978:282;;;-1:-1:-1;2346:12:203;;;;2283:5;-1:-1:-1;;;2311:15:203;;;;1345:1;1336:11;1303:1065;;;-1:-1:-1;2385:6:203;;700:1697;-1:-1:-1;;;;;;;;;700:1697:203:o;2402:250::-;2487:1;2497:113;2511:6;2508:1;2505:13;2497:113;;;2587:11;;;2581:18;2568:11;;;2561:39;2533:2;2526:10;2497:113;;;-1:-1:-1;;2644:1:203;2626:16;;2619:27;2402:250::o;2657:330::-;2699:3;2737:5;2731:12;2764:6;2759:3;2752:19;2780:76;2849:6;2842:4;2837:3;2833:14;2826:4;2819:5;2815:16;2780:76;:::i;:::-;2901:2;2889:15;-1:-1:-1;;2885:88:203;2876:98;;;;2976:4;2872:109;;2657:330;-1:-1:-1;;2657:330:203:o;2992:862::-;3154:4;3183:2;3223;3212:9;3208:18;3253:2;3242:9;3235:21;3276:6;3311;3305:13;3342:6;3334;3327:22;3380:2;3369:9;3365:18;3358:25;;3442:2;3432:6;3429:1;3425:14;3414:9;3410:30;3406:39;3392:53;;3480:2;3472:6;3468:15;3501:1;3511:314;3525:6;3522:1;3519:13;3511:314;;;-1:-1:-1;;3602:9:203;3594:6;3590:22;3586:95;3581:3;3574:108;3705:40;3738:6;3729;3723:13;3705:40;:::i;:::-;3695:50;-1:-1:-1;3803:12:203;;;;3768:15;;;;3547:1;3540:9;3511:314;;;-1:-1:-1;3842:6:203;;2992:862;-1:-1:-1;;;;;;;2992:862:203:o;4051:154::-;-1:-1:-1;;;;;4130:5:203;4126:54;4119:5;4116:65;4106:93;;4195:1;4192;4185:12;4210:251;4280:6;4333:2;4321:9;4312:7;4308:23;4304:32;4301:52;;;4349:1;4346;4339:12;4301:52;4381:9;4375:16;4400:31;4425:5;4400:31;:::i;:::-;4450:5;4210:251;-1:-1:-1;;;4210:251:203:o;5493:184::-;5545:77;5542:1;5535:88;5642:4;5639:1;5632:15;5666:4;5663:1;5656:15;5682:674;5758:5;5788:18;5829:2;5821:6;5818:14;5815:40;;;5835:18;;:::i;:::-;5969:2;5963:9;6035:2;6023:15;;-1:-1:-1;;6019:24:203;;;6045:2;6015:33;6011:42;5999:55;;;6069:18;;;6089:22;;;6066:46;6063:72;;;6115:18;;:::i;:::-;6155:10;6151:2;6144:22;6184:6;6175:15;;6214:6;6206;6199:22;6254:3;6245:6;6240:3;6236:16;6233:25;6230:45;;;6271:1;6268;6261:12;6230:45;6284:66;6343:6;6336:4;6328:6;6324:17;6319:3;6284:66;:::i;:::-;;;;5682:674;;;;;:::o;6361:459::-;6441:6;6494:2;6482:9;6473:7;6469:23;6465:32;6462:52;;;6510:1;6507;6500:12;6462:52;6543:9;6537:16;6576:18;6568:6;6565:30;6562:50;;;6608:1;6605;6598:12;6562:50;6631:22;;6684:4;6676:13;;6672:27;-1:-1:-1;6662:55:203;;6713:1;6710;6703:12;6662:55;6736:78;6806:7;6801:2;6795:9;6790:2;6786;6782:11;6736:78;:::i;:::-;6726:88;6361:459;-1:-1:-1;;;;6361:459:203:o;6825:437::-;6904:1;6900:12;;;;6947;;;6968:61;;7022:4;7014:6;7010:17;7000:27;;6968:61;7075:2;7067:6;7064:14;7044:18;7041:38;7038:218;;7112:77;7109:1;7102:88;7213:4;7210:1;7203:15;7241:4;7238:1;7231:15;7038:218;;6825:437;;;:::o;7569:430::-;7766:66;7758:6;7754:79;7749:3;7742:92;7724:3;7863:6;7857:13;7879:74;7946:6;7942:1;7937:3;7933:11;7926:4;7918:6;7914:17;7879:74;:::i;:::-;7973:16;;;;7991:1;7969:24;;7569:430;-1:-1:-1;;;7569:430:203:o;8004:287::-;8133:3;8171:6;8165:13;8187:66;8246:6;8241:3;8234:4;8226:6;8222:17;8187:66;:::i;:::-;8269:16;;;;;8004:287;-1:-1:-1;;8004:287:203:o;8296:277::-;8363:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:52;;;8432:1;8429;8422:12;8384:52;8464:9;8458:16;8517:5;8510:13;8503:21;8496:5;8493:32;8483:60;;8539:1;8536;8529:12;8578:361;-1:-1:-1;;;;;8780:6:203;8776:55;8765:9;8758:74;8868:2;8863;8852:9;8848:18;8841:30;8739:4;8888:45;8929:2;8918:9;8914:18;8906:6;8888:45;:::i;10168:397::-;10398:2;10387:9;10380:21;10361:4;10418:49;10463:2;10452:9;10448:18;10081:2;10069:15;;10116:12;10109:4;10100:14;;10093:36;10154:2;10145:12;;10004:159;10418:49;10410:57;;-1:-1:-1;;;;;10507:6:203;10503:55;10498:2;10487:9;10483:18;10476:83;10168:397;;;;:::o;10734:::-;10964:2;10953:9;10946:21;10927:4;10984:49;11029:2;11018:9;11014:18;10647:2;10635:15;;10682:12;10675:4;10666:14;;10659:36;10720:2;10711:12;;10570:159;12448:440;12698:2;12687:9;12680:21;12661:4;12724:49;12769:2;12758:9;12754:18;10081:2;10069:15;;10116:12;10109:4;10100:14;;10093:36;10154:2;10145:12;;10004:159;12724:49;12821:9;12813:6;12809:22;12804:2;12793:9;12789:18;12782:50;12849:33;12875:6;12867;12849:33;:::i;12893:440::-;13143:2;13132:9;13125:21;13106:4;13169:49;13214:2;13203:9;13199:18;10647:2;10635:15;;10682:12;10675:4;10666:14;;10659:36;10720:2;10711:12;;10570:159;13871:357;13989:12;;14036:4;14025:16;;;14019:23;;13989:12;14054:16;;14051:171;;;14144:66;14128:4;14124:17;;;;14121:1;14117:25;14113:98;14102:110;;13871:357;-1:-1:-1;13871:357:203:o;14233:320::-;14439:6;14428:9;14421:25;14482:2;14477;14466:9;14462:18;14455:30;14402:4;14502:45;14543:2;14532:9;14528:18;14520:6;14502:45;:::i;15285:422::-;15550:6;15539:9;15532:25;15593:6;15588:2;15577:9;15573:18;15566:34;15636:2;15631;15620:9;15616:18;15609:30;15513:4;15656:45;15697:2;15686:9;15682:18;15674:6;15656:45;:::i;:::-;15648:53;15285:422;-1:-1:-1;;;;;15285:422:203:o","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","testEmitOnPuppet()":"f60736ce","testEmitOnRootPuppet()":"3ae50144","testMsgSender()":"d81bebb9","testMsgSenderRootPuppet()":"06e28a34"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"msg\",\"type\":\"string\"}],\"name\":\"Hello\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testEmitOnPuppet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testEmitOnRootPuppet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testMsgSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testMsgSenderRootPuppet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/PuppetModule.t.sol\":\"PuppetModuleTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":3000},\"remappings\":[\":@latticexyz/=node_modules/@latticexyz/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"node_modules/@latticexyz/gas-report/src/GasReporter.sol\":{\"keccak256\":\"0xf0b03a19a92cd2e9950c25b6d307e5aeca4a64be8932194431197d0570e9bf3b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef2a14f0fb6e5bcab0c70d3648d247c3919c63eabc8b226be4d1f359d8af860f\",\"dweb:/ipfs/QmXi1HgeUNmS9GwSFMDJa8QVT7KiENG9VjgBB78hpHrHV6\"]},\"node_modules/@latticexyz/schema-type/src/solidity/SchemaType.sol\":{\"keccak256\":\"0x770eff7a38b9b7b1613dc11ca09db4f28b42a117c9b39b2a06a650a58a250bdb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39f544110658a53def52c2a4e33b8b158b95a4f14fccea58d5268b6e728d86d4\",\"dweb:/ipfs/QmTesj6tjSFbfAiKUitXapdNYWPStS8bLkB3r22qfyHwUC\"]},\"node_modules/@latticexyz/store/src/Bytes.sol\":{\"keccak256\":\"0xe0bc789337c31551a3ad42fd63aba2489a3aa8567d9f3140b3abc9abdc0d2f1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d5313aaa217e563083d9e4ded9479d673b17ba71a189b6a0315839812a5c57a\",\"dweb:/ipfs/QmQJfHFMSPrS6p6q3rzKX6HDNCVsQQAWxGdd383FSfKChd\"]},\"node_modules/@latticexyz/store/src/FieldLayout.sol\":{\"keccak256\":\"0x7335db1982f43f867f90c3e151e3cc6d6ad40ee76401e2e06b8fdff257d6526f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a49d381ef0a0defc90f41166bc7f45cf31e8d82d1517e6a323a90e79b4e45d1f\",\"dweb:/ipfs/QmP46aGM8cYPkn6C4rGnrumcg24g7aUzCAez41zPs2rqhx\"]},\"node_modules/@latticexyz/store/src/Hook.sol\":{\"keccak256\":\"0xbe6448092b2d0c77a7cb282e8a452732587a6e04802ad21f4da27a9d6ef1496a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1d098409f9352637599b897d046ad23e20894ea3a8460687df2a13d2d960966d\",\"dweb:/ipfs/Qmd3w6dSq3kQVQQtH94wcKRzkaNEDWcE2m9bgbWWDqNE3w\"]},\"node_modules/@latticexyz/store/src/IERC165.sol\":{\"keccak256\":\"0x2bbc3c43400c15a91a5cb35430a91309cb64a4d13a0a170eacec71dcf334feaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f44dfc9605067de539de07a76a34bf469faa9e6dad8c192abafc2e05860c7dd2\",\"dweb:/ipfs/QmX8xgG6XWokM7YFwFZvmMhuh1uhkSjxCMD2oTHjUVdapb\"]},\"node_modules/@latticexyz/store/src/IStore.sol\":{\"keccak256\":\"0x9092b65551d0f910e5645cebb5acadb387cdd192d75fa89cd6b293bd65b28827\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://478825a6f7eff9ddab968e71e1d55ebee279d3b318f10976d9334384000059c0\",\"dweb:/ipfs/Qme7NY976woRy3RQjE4tkkiwoXnoVtTmER3PbWCSbjZ2kb\"]},\"node_modules/@latticexyz/store/src/IStoreData.sol\":{\"keccak256\":\"0xa8eade05c551aeef35c84727d7a44af239516deb2d8a0cfb7ebeb5d88c6995e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5335910bd8a204abb5f4396fb911a5ee5c221bd7fa63b1cc8ae5e737c6458c6a\",\"dweb:/ipfs/QmckkCAfrNcWo3yDxoD1jCe1k4iDA2GzVDpFjJZs7W79vx\"]},\"node_modules/@latticexyz/store/src/IStoreErrors.sol\":{\"keccak256\":\"0xb9070663ded3cad82285bb7610949e422f88abb48c2ddbd792af83d127d64212\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://830490f1c888bec86df1e7ef43773d60ebdbdfdb2b91ab7fe074e2f38d7439dc\",\"dweb:/ipfs/QmS26fpXdZuGgMmjcdQDf9k1Bedn2dhjk9byFZJoNkctPZ\"]},\"node_modules/@latticexyz/store/src/IStoreEvents.sol\":{\"keccak256\":\"0xdd3104680808f975462a85cbd4fa87783ba5395797419caeeca37e8f8627a16f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://943864b7eb16ad2047ade5a8598e85c8a4b46d1aed6aef02bfb7cee8de732b4d\",\"dweb:/ipfs/QmTEij4caToSNk15PFpubXYDy9QhwmPyP9tMXjUse2cTdv\"]},\"node_modules/@latticexyz/store/src/IStoreHook.sol\":{\"keccak256\":\"0x9c3ba4c889db2cc2155ddfc966f5df45cf73739cacc358e0ed71ee9d34d9cef9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bc8e8abc3d5ce2af06c3a9f37ebe69cb287514c4572327b09d26121133646e5\",\"dweb:/ipfs/QmY7BmHTiGAJabiLZXLx2zsRs9HfZzK97kwmnwfCidcHZ5\"]},\"node_modules/@latticexyz/store/src/IStoreRead.sol\":{\"keccak256\":\"0xd2180d53ecd31069b1166f170ecdcd85917ac50f45fc26fb39b49cee7ba00e37\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1494bb0a3228e2d194bddaed4761fd3ca865979f0e3f3a53acd271143a4aa0ac\",\"dweb:/ipfs/Qmaddnzzmu99iP9dTWK9ZeByh5dZyjY9SpVnRdvyr2fBAo\"]},\"node_modules/@latticexyz/store/src/IStoreRegistration.sol\":{\"keccak256\":\"0xf448fbb2bc9c982721a43234463656da5a49cea08543e62148d54f11e1ac3e2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://64b3579d9b9dcd73dca2beab3d4fcf60237420945ebbb2e9f4ffcc88f4110115\",\"dweb:/ipfs/QmaW5nN3zGEriSYHncye6Nz2TkAw1oo1CyG2JuJTJrJoXg\"]},\"node_modules/@latticexyz/store/src/IStoreWrite.sol\":{\"keccak256\":\"0x8b6c7af5ee330928aebb58c8872d3944304ee10ed11f8a325b6accc4ec5df81b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b866d158701c7a40834bed735194b804ef219f2bbe574e2307785fff7bcf9da1\",\"dweb:/ipfs/QmXzJfZkXVfyr2RFGwDuazeVnV3UWYmQxjKZ3KzFbbe75U\"]},\"node_modules/@latticexyz/store/src/Memory.sol\":{\"keccak256\":\"0x69295976e61a1a108d1b4d6eb497b238730309f3047c4320d48e01a0ce8d4ec7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://559c451b21fb9dd4fec27b41bef42f4362f1e7ebb7992106d548b9d4f733b3e5\",\"dweb:/ipfs/QmeSE7YTW5zUrfZYFVb2pFnDe3XxiT8XNecfwC3wfpxCRv\"]},\"node_modules/@latticexyz/store/src/PackedCounter.sol\":{\"keccak256\":\"0xf2ac4fe9b94aba49819b8bfd9952a73e21bd30aa956aa3a0ba4333d0e4891e91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c41b0bb60c662aab1287d0ec92cdd7ce07e6a732ed8d5e6045e14c7ba49d4ce8\",\"dweb:/ipfs/QmYMHVsvJpDrpFW24uHmJFjA8tbr7WjyP4KAFnroApP7Br\"]},\"node_modules/@latticexyz/store/src/ResourceId.sol\":{\"keccak256\":\"0xd886462cb60be5929d17bed2740225effa8149ef6358378e9e1f385d58673be9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f66f49397097f9445159417fb61bd362de7849b1e572a3a9b5cb0536636a3d9\",\"dweb:/ipfs/QmPYEREcaUyoqykx4hjJG4k3P9HYmAM4gAxvGsJT6yWqvn\"]},\"node_modules/@latticexyz/store/src/Schema.sol\":{\"keccak256\":\"0x58aef318ba03f8ff8866ef70f8a30f549b150657ea699734aefe16c298956401\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dc104690a7e2bcf5ce1afadcd58f8ef4d639b4b92b9ad9293656235d54395f3\",\"dweb:/ipfs/QmYJJvEv5KBJ3kzf9AkgRn7Uu5dp4exGTRddf4cae1btgE\"]},\"node_modules/@latticexyz/store/src/Slice.sol\":{\"keccak256\":\"0x08f813a47c9b17e647c4051b310fb7b04e2af87c5440f4c916e4e6b5bfb29710\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a7966452656a25e3555e39f10121a69690b0ecf23524c073f61f9ea31a922f3\",\"dweb:/ipfs/QmQiEsLYyZFBZbcAbzwSK2dKxpj7xbs7CPLt3py3uGZSSN\"]},\"node_modules/@latticexyz/store/src/Storage.sol\":{\"keccak256\":\"0x5a32d464b56d13b9cf93f15c366e1ba8c4e2242bbad3990829c7f674e49ac2f7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adf1460050534fbdf4b2615c9dee03aed9d84bc0198cb082b10e579ab01d568e\",\"dweb:/ipfs/Qma2zugjeP748bkmbYhqVrzrKcdn18KLH3TZMfVuhHq2M4\"]},\"node_modules/@latticexyz/store/src/StoreCore.sol\":{\"keccak256\":\"0x6f21b3b6e6c202a1f9a5ba3ce7a656d38b51e1f1755a7ba3d1bc4c083a94aa94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e5499fa030ff8dee5db70851dc678a9f0eb7c2a548f27fd5a3ecd0b44038642a\",\"dweb:/ipfs/Qme3ZGKP1YYMt98rFJ8uRRZ2jgWaqNdKAS9HaEP4HYPrB6\"]},\"node_modules/@latticexyz/store/src/StoreData.sol\":{\"keccak256\":\"0x4e451128c33a01d520c1944b3db42a62c158aea8fa11e786a58a0f719a189526\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2f98f30a7b2c9ef020e274b87ae0fa66d1380343a00ecf6bd796ae31cd9b279\",\"dweb:/ipfs/QmYXHSBn4Hp7cimDLKy86ep23v2VRUS6dLPevcVMs3dJrw\"]},\"node_modules/@latticexyz/store/src/StoreRead.sol\":{\"keccak256\":\"0xd918972009bd009dbad7032b8ff076928cec18c0891bb12493a1799df83e9cfa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://966bb2090623b9a6aae0e5df9ae4c9c21bbde97867a239303c934c765eebf738\",\"dweb:/ipfs/QmRui6vJ8UfNHAueDyRuSXfW7wwuxRxAHgGjB7wVJEB6cJ\"]},\"node_modules/@latticexyz/store/src/StoreSwitch.sol\":{\"keccak256\":\"0xf132af10f960a498f49c0534027056e715f4bdcb8fbdb53ac6879c92309ab416\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e85a09aeb7543bcd9d74b7ad319ae61e1f7f15a6a0ad9e79aff750fbd18111c7\",\"dweb:/ipfs/QmY6xgqeeaR1FsCPLmFbVgjm1D2UyrXNABKXWLfFaSmBhR\"]},\"node_modules/@latticexyz/store/src/codegen/index.sol\":{\"keccak256\":\"0xf337a5abb2d43ef00c1c200e7fbec30fc89c7c701e457ab4277194b700d2aea3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eccdf6158076b4e8f1b587a0310228f53323705e054a44eaa7733f38805c3ee6\",\"dweb:/ipfs/QmbXEVNTctg54dK9awdCVyAjeuUjR6ckfmmXBP8DrFmjyq\"]},\"node_modules/@latticexyz/store/src/codegen/tables/Hooks.sol\":{\"keccak256\":\"0x6ba24d7c79f616a40a5a28466a113c3b491196ed43a236124ae9f52f940ebae6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c055a11a1a52d820e5f71c1434b94b2083304d94655d7dbcefb7c7b4e42a095f\",\"dweb:/ipfs/QmUU119ZHn9S3ExK8ZhNyHbdxWMu3RasLDZco9vR9KDQJw\"]},\"node_modules/@latticexyz/store/src/codegen/tables/ResourceIds.sol\":{\"keccak256\":\"0x0d5cb177f2e3f968b5d8962727ee95f6ec12f2f02635bd3388e8ba658a513782\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c1f989b97f782ba8a7b7aa85c79564a4eeca21e8c0c255d287d5a2fb42700e9\",\"dweb:/ipfs/QmXVeQ9p6b8GRMYE8QWPR89xRsMWRQsxPMgQHsUvMWbLeb\"]},\"node_modules/@latticexyz/store/src/codegen/tables/StoreHooks.sol\":{\"keccak256\":\"0x92e5306a8572903c6ed2ede4713de8356221511aaa9043a115010d8dc504d95d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c36a58e47472e86c8b995c33eef1be95c7073d30e8e4b59b4c65413cbe34f695\",\"dweb:/ipfs/QmaHP8apm4XnMSQkMT4Wysu8LxVSnH5JcPne5PV8YPyJNv\"]},\"node_modules/@latticexyz/store/src/codegen/tables/Tables.sol\":{\"keccak256\":\"0xc1ce9530a25c9e1ebc6a4d1789f26b9607f09b38132a64ced9cfcf34e3011e91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d67414de99946c6c199fce2700a2765e279d4fa9c0ff665035193883221979ee\",\"dweb:/ipfs/QmViGZuPahjSGa18UtAjSXbAao9wuMK4m6hxjtX6pDqqU7\"]},\"node_modules/@latticexyz/store/src/constants.sol\":{\"keccak256\":\"0x9e37c64c119ef07ad914bc589ee3f6d67946ab95877978c1ee3e2c1ffae07076\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3fad47e542025382aa28e8171253e34f93b2f149434b67a26989542d70218793\",\"dweb:/ipfs/QmW6JsKNwPc6oAMrgcikgR2EPwMUtQANiuZSQSGCd29HHC\"]},\"node_modules/@latticexyz/store/src/leftMask.sol\":{\"keccak256\":\"0xe050786c52cfb1da012bba86744d2a89f8aa6507342e498c96fbe013b0d6302f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a62d2f8eb85ddc6de911a0b415bbcf666001ecfd15e681f718cb9ae053a3a793\",\"dweb:/ipfs/QmXZHfKXZNQRJMqLpS15kgZgMfMUkoB8FhypDWDaYaqtJG\"]},\"node_modules/@latticexyz/store/src/storeHookTypes.sol\":{\"keccak256\":\"0x60880298016fa117ed9a43ddfd020f11d98a2d345bdcb08e5884e40df98eddd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3619dfda1fd514c0fc5fb34c14d5b5aa41dd6ba6045d37d5f4c8199f3a826f81\",\"dweb:/ipfs/QmbzRBYfVa423gNzCitpGN3i2N9oeGYfinVE1jgtqxnNZX\"]},\"node_modules/@latticexyz/store/src/storeResourceTypes.sol\":{\"keccak256\":\"0xada1867ba72930fc5cf5562dd4e36de849dbac9c833b7969cb1b046a808fabf2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e4b5fdcaa54f567a3f8561c2c3fbc0d68c8dad892a4a8e5418bbce8efc53d84\",\"dweb:/ipfs/QmTWbYJX1yrCqrEwUKB9rGpHdRvLNU8GCkBbxnLjGD4d2t\"]},\"node_modules/@latticexyz/store/src/tightcoder/DecodeSlice.sol\":{\"keccak256\":\"0x1af0fd984640123391ec2df855d00298504b7ce186a56c2caca769cfd9e08e04\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7305a62318890d2cc6420ba7dec13d9f2c1cb67ac689015fc83b9cbccd0696f1\",\"dweb:/ipfs/QmR8jGNLbt64Tv1YZKRVBCVsd71oeUQFzGHHtpsrs4PuRq\"]},\"node_modules/@latticexyz/store/src/tightcoder/EncodeArray.sol\":{\"keccak256\":\"0x1c280d24360282e196d9c4833c58c2437108cea2af0ac7596f95be81389e306d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b4556b6eeae9328fbd9adcce346547e823c397503276a4d63effb67e00b5b49\",\"dweb:/ipfs/QmUsynVsMYzjh8oJR8YB7SRrwFMdXcsQsHBrXxLEEFxsiB\"]},\"node_modules/@latticexyz/store/src/tightcoder/TightCoder.sol\":{\"keccak256\":\"0xca2e2218bccd60ed690f29152b234a553f3021cad4903c0cfb5cf757fa41d650\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65f3bf5b851072ba1367ec74b3c66cab6185f3c8c8d6ada007cdc8c513465d25\",\"dweb:/ipfs/QmdHsBNc7ccvTK7VDB9yAktdbRNBrEsUdBNFZTqdq8Vao2\"]},\"node_modules/@latticexyz/store/src/version.sol\":{\"keccak256\":\"0x01029999a48b7c1d85de84cae465dd24ec126c95b8a865cd20c7ed5dfcc0f02c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9750164ce996badb0fd7df2f526780b9cb9558912405fe46f31064bd7c522491\",\"dweb:/ipfs/QmYf8m2ZXFANRc9ysHgNkNtSF327ccxKYjCUJ49UXBKADk\"]},\"node_modules/@latticexyz/world/src/AccessControl.sol\":{\"keccak256\":\"0x963a4fc3983bf92a473e67f49b62b8f52d94360bb904664b24bbff844e6a4a41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2cf0ea9f68a1a9738b116259dc2cb06e98cc591d82b2c271b0e70e8daa742952\",\"dweb:/ipfs/QmRVxuBtGgw49v3KGm3HTBNS5ZJ9wEvENwipJEFEtoiaZ4\"]},\"node_modules/@latticexyz/world/src/Delegation.sol\":{\"keccak256\":\"0x09324c2d43eac847a312e1879de1019d1b6eb333d9c9e0d42c449d76f5d9fc89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd6f751c31f1305ffb328b1cd4bcc3999439f63f2b8ad9a33bbebdccdf60e716\",\"dweb:/ipfs/QmRfj5xWwC3wzFr9iAQBr1pAQmLYPJhDRXyRcJpYfhDdoE\"]},\"node_modules/@latticexyz/world/src/DelegationControl.sol\":{\"keccak256\":\"0x1ed755a4addafd3d0fd1b527d46ea9951920496f8104fa836b297b2544d6fed0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a55b1fa9ac9bd53177d529fd9a000d5e4b455a6aec23004c71365d352c6e6fda\",\"dweb:/ipfs/QmWhetkDnCTiyi8C6qZf23misxJfnGWjesStFZV8sdD8oe\"]},\"node_modules/@latticexyz/world/src/ERC165Checker.sol\":{\"keccak256\":\"0x26204bcfddbc272eae391f4512a629f53697867d582ea8cabcd6a8e04a255270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46944bac8253250ba3f645a6164df8e996738bc76a544867677e54ede57619a1\",\"dweb:/ipfs/QmY1XSxQY9MuQSEvGaeQT6kqmeJ3VhYyRRTfzCkRmdsWsX\"]},\"node_modules/@latticexyz/world/src/IDelegationControl.sol\":{\"keccak256\":\"0xbf3da1c6ab38b3db62a4f4dd0235280d1fb07d8d465a145d6fd9eaf4bb4c3553\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30205a69d660ed8de5bf34ee73ec9033737d544bc7572130c439b2467606469d\",\"dweb:/ipfs/QmUWTNdSW1bxXjaQzMUCLqBBoLYYre7CgDko4Qy12DaRNS\"]},\"node_modules/@latticexyz/world/src/IERC165.sol\":{\"keccak256\":\"0x7997ebbdee6a2493f28e7032c7a8b906ade40f807d95734e2653c8f1b023ff47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8ca41bb2619bf27e5bf886d1322f0e2dffd096c49f7ae6e716541dd1e1ddce5\",\"dweb:/ipfs/Qmb8zATUWWTtiWaSLjbAe6PGnJPes9ANvEyk7pYoWR3P3Y\"]},\"node_modules/@latticexyz/world/src/IModule.sol\":{\"keccak256\":\"0x9ace961d4e283e0974762fddb14bb15e256d1d1086c813957fa0a0c9abeca900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce3e6875d5ae61e12f3a36b8cdd2aa42e137f4d356109f89101fc7ea2d38f35\",\"dweb:/ipfs/QmbCarvuyKZhaEKebPnzwxCrXPGZvZB5AnJxfXgCgex9py\"]},\"node_modules/@latticexyz/world/src/ISystemHook.sol\":{\"keccak256\":\"0x96b32546011ad67c3d03815dfd9375e9f8a255f98aaf89880afa1c8548d372b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c58294560e554b8d8c6e3e870768523aa034631d4908ce25e730bb372ce7795c\",\"dweb:/ipfs/QmU9KfaZRNmQdoZE5bNrMN6QJCm7HGfsCBPvBGbMLLq9E5\"]},\"node_modules/@latticexyz/world/src/IWorldContextConsumer.sol\":{\"keccak256\":\"0xc7da95c29b6dc76d21ea866139e4cefeceeec094326811a4e5afafe494d6a881\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3048f85d42046b460ff285e38091a18ff848a489670e278b233669baecc2d6ef\",\"dweb:/ipfs/QmPbeYVnPefPmtpaXXAGAjEGXjducZf9sF8fKqgfENCpwj\"]},\"node_modules/@latticexyz/world/src/IWorldErrors.sol\":{\"keccak256\":\"0xc3e7975e5785574543229eac51e3441f4185863d7f5346c0ae08a27b4541f8a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62cc0dc109e6e5475bb07fb95643a31c74337c23521db0557a36dad6117a1e83\",\"dweb:/ipfs/Qmb8jbE1XQTUdreKFr4Jw3xmjctaLuReRZjPxZKQ2uW9p4\"]},\"node_modules/@latticexyz/world/src/IWorldKernel.sol\":{\"keccak256\":\"0x9dc133cb55dc23fd6fcbbef8078bb4ea9bf67d698400cf89fc62b905b60cf5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c1a57df7052218483eafe72d873660f39a73e2e06c1b14ad8a579d85b94bc6c\",\"dweb:/ipfs/Qme7dnjvADGZyM2L7nZ51nSjsjXXF9isTVCpWaUCd1cEGs\"]},\"node_modules/@latticexyz/world/src/Module.sol\":{\"keccak256\":\"0xd0060c58956a1fe0855bcd9099e8764922f0d3b96f9683bd9622b8da05524f19\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6098c318c6b2606aa0a31554c6dd5923b6c106c24daa2f1119311cd4f4e47bce\",\"dweb:/ipfs/QmZTSSpfmNWakCYvFFZhd7zjmnkNPuSeYKhfCQwZ2gjRWL\"]},\"node_modules/@latticexyz/world/src/System.sol\":{\"keccak256\":\"0x7bece0ec86fdc458054e6db0ac4316fc98882fa3ba76b2fa107d3de5382053cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d154183426723bbf133d4dc5f8d051e9521f7b7cabe63925731fa4af99379cdd\",\"dweb:/ipfs/QmZXxPGcqknGLCwTByaZFKhqvKbrfiZkywmnh8buGTC2Mc\"]},\"node_modules/@latticexyz/world/src/SystemCall.sol\":{\"keccak256\":\"0x2ec34d896ea59d4bd47b99c1c1476c9c8f94f21d8af5f35ceebfeced4dd48ec2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://97dc97678b209c5e69d8b45adb3fe8c8d8b8fffbd725a8deb462c790a6a58a01\",\"dweb:/ipfs/QmbUntQJj9n55PDjXcdJtmsWSPdWzyhbe6UCK9iHJuq3XM\"]},\"node_modules/@latticexyz/world/src/World.sol\":{\"keccak256\":\"0x2fa1e13f367a2110bce824ed5fc8b3d74cf60b0075492a7831dc887fc47de54b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a7afd2c5fddf3d635a25a03aeb34991036ec8a9a59f44ea323f8c1f3f17bbf14\",\"dweb:/ipfs/QmbYiNvJmD8mCjeAY83Jebb54dTcgYd4Knr9jbKnMcDwf6\"]},\"node_modules/@latticexyz/world/src/WorldContext.sol\":{\"keccak256\":\"0xa11d93077d94f18683f1098b69c4713a48001ae15054476135ec9569041abb9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b1d3384def68b4061c445b55602dd9cbcd4e8c58c13db5e945f284a05c1b518\",\"dweb:/ipfs/Qma5DUZrSKZUxrxiGCpyRPWMJNdHU2wu6qDEsFWEJSnLfN\"]},\"node_modules/@latticexyz/world/src/WorldResourceId.sol\":{\"keccak256\":\"0x7daa706e844ddc2ffa9ff2197139fa73faee614030c5d541e339c219129005ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62da4413068810e6fa32ef87b2a83386a0084ec2bb26722515127e5893281cbc\",\"dweb:/ipfs/Qma5SLsHRq3igdXfKz24XSGfMd3dXyNxv52WSTsrcLRWPV\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IAccessManagementSystem.sol\":{\"keccak256\":\"0xc912f14d0f2e2e9e728a9d18e250ebe3eb2f51d0b4d79993c9d997991bbd5593\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29621425847a1c11205307896b04e2a6c97934dd619f23ce6774ce52520f1255\",\"dweb:/ipfs/QmeuTe3q8U11Dqkp5tahxVWnp9Cd5ezQmRZ5vhEHtv14Eu\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IBalanceTransferSystem.sol\":{\"keccak256\":\"0xf04594c29c5c5b3110453ac189a8008735753de864ab4a7dfa97ccd3ae5f4a55\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a3061f72b969a294dc96c3b2e59277e762ce6571cedcc7e280412431453dde5\",\"dweb:/ipfs/QmWB9aboakrCH9AmzGiZ1mCceh9atF4ks5ndEYFzUVbaHT\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol\":{\"keccak256\":\"0xf103db760a912d42dac0c409feb2d1929864ae81f89a7186047ea6f98b9db2ed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9ee556bbf7f7aa2f221e1f5a9d80caca8d4e5bc9282f59d5611a7c9ea7c06024\",\"dweb:/ipfs/QmQouopBhk5VuzdUSVc9MC3C5nhbm1MgHmQhemf6w66WxE\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IBatchCallSystem.sol\":{\"keccak256\":\"0xb4d323470e22b1d3f0168a44196eb09466f602b7564c75e5739c5f53a5036f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://acad752208d00b731baaa1cfa192ff3981001fd030953bdc604e4f69ec2cd0b8\",\"dweb:/ipfs/QmRFw3RgmX2CHqg7PqsP3rqVKxBVYNq5hHcFiyA2Y7iAaX\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/ICoreRegistrationSystem.sol\":{\"keccak256\":\"0xb5e41596b245dbb0f4317174ae08c963a55df07cfd1a2e65bd082628bc446350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://007f0e50c7f40d3932c5db51f729148f7d67573ef2f429043d901c7b017d7f43\",\"dweb:/ipfs/QmdmnY9RFyGjhmjSif3wZYHSMhtkTNhxi74dzVzsQBgi2N\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IModuleInstallationSystem.sol\":{\"keccak256\":\"0x5be1d1ee90a7a03258e8c4fce7542453332c637a51b015e0cc29151ef2792263\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6d97356b2ca9d97b7593f4c0772742529fea73f1665e55a879a368b399cae0\",\"dweb:/ipfs/QmXCs5X4Z95isKRzjP4TQjQxwiB7773tHiJWLWkjLv3SLj\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IWorldRegistrationSystem.sol\":{\"keccak256\":\"0xd7e31957e7fcf056912fe16e10a0411bdb071c14c45853e7da264dfbfd6bcb62\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4ce02327ac8971177685fc2655733ed3c07f5dfb72846680544a48953180aad\",\"dweb:/ipfs/QmQMNtkeCXdZfyyvtY8vUrKh5RUbpM7HYMGrzbxZGzTEFh\"]},\"node_modules/@latticexyz/world/src/codegen/tables/Balances.sol\":{\"keccak256\":\"0x2fd9727c04a06dacd957c320e5c91844e389df164a02f6c35e169852d974a1f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfab99486f9011db6590d75947a8510540bc5d6160866cfd1fafe16daa024961\",\"dweb:/ipfs/QmPAyaKJwhawWcyegfHv1QkJYzdAMpySok2gDKVPpw1rvD\"]},\"node_modules/@latticexyz/world/src/codegen/tables/FunctionSelectors.sol\":{\"keccak256\":\"0x8bcbbd417bc83b92c1d40444cf2e617d8a5c7e4d7486dcc3467fef2470338bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aedd3d896ccc900aa9a4f53ec7a9245e5630f51e847a0e2356e12e4492084a8e\",\"dweb:/ipfs/QmRQJwy5XYHGXT973hYdPUR6cG8fSDPi8kPgprYJXUfuVf\"]},\"node_modules/@latticexyz/world/src/codegen/tables/FunctionSignatures.sol\":{\"keccak256\":\"0xed3112d1dfeb8afa9be21cc3bf70f7af31b0443e9579f080e7ac2640664b8426\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://571277bf66022fb97fb43948379b560c6d6904dc0272f91b30d3ab16a5b76c91\",\"dweb:/ipfs/QmNhb9rrrW8KXzLfg3eiUR86hnRhaD2kzN5mAcWuWQ4pu5\"]},\"node_modules/@latticexyz/world/src/codegen/tables/InstalledModules.sol\":{\"keccak256\":\"0x334f30cf5cac3f795cd63f15582a6a50c91c91644000a1a5c3005a4c17b075ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79369df71ea24d4eb6579f9edc5ac3f8c8d4fe2563db7438c957f7cd8fd696d4\",\"dweb:/ipfs/QmZBQv6xBpXWocxy4nX5o8XJYuvi88y69YmHJYUGgGFRN9\"]},\"node_modules/@latticexyz/world/src/codegen/tables/NamespaceDelegationControl.sol\":{\"keccak256\":\"0x760eec42bbfbdb497a80fa704956c82bca38d21ee220a1671ac7fc1364ddc0ed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://313982b1791750271b460fa94c3ea54eeb2d88b3093ab2cace6014a6c9ee387b\",\"dweb:/ipfs/QmVagcNagZkFZeVieECp53rjZEYBB6LU8HP4BjKzfiC4Qr\"]},\"node_modules/@latticexyz/world/src/codegen/tables/NamespaceOwner.sol\":{\"keccak256\":\"0xb59422d88ec4d7ea5870bfbcd26cce216808aca2524d78be044e6246c2e0c8cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://690489521124436a18dd3b2efc1c28636488414b82c6dabf743bde1c8f9ab70b\",\"dweb:/ipfs/Qma89LxYq3aBdNZnsiH2qKuq47gmSn9QpeoFe23pahus5Z\"]},\"node_modules/@latticexyz/world/src/codegen/tables/ResourceAccess.sol\":{\"keccak256\":\"0xa6dd49d8d3bc8ce68d45ebc01f087ef83b1d758e9967322fd15cf641331c2527\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a80f0382a7bad47b1b947bc9b447eafb35599b0e11a9bdcb45c7cddb3bc1375a\",\"dweb:/ipfs/QmRBWAsqUya6uxXn5fqJPgnkytDfp8HXixcymwTmYKuoPc\"]},\"node_modules/@latticexyz/world/src/codegen/tables/SystemHooks.sol\":{\"keccak256\":\"0x43cb675401e3e464a93ae0ddaefdb6ac03b734b7226ba89b8727d6421e50e2e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a37a9d6881779113b1b78b0e9175b64089da881be1176fc764ceaee9fc65436\",\"dweb:/ipfs/QmXgCyyJUAAn99Czgv51nkr6qi9hFduhJpybkn95ipJHJL\"]},\"node_modules/@latticexyz/world/src/codegen/tables/SystemRegistry.sol\":{\"keccak256\":\"0xd0128bfb43b2afdc0c0410b6a642ce7b5ae4e5c90c367e542ea0b3e8d02eba22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59fd7075792470f625e15e7c7a5d377b6657b26ce22a82c705888c2773840330\",\"dweb:/ipfs/QmdPygA9VW1Zdds4FTejEDSEKzaPWDFvXP1VqsaJB6KF8q\"]},\"node_modules/@latticexyz/world/src/codegen/tables/Systems.sol\":{\"keccak256\":\"0x20ad3ee26ef118cb8b055803c4a5ef2aac4791ce9e8720fc6a549120c53ab37a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://58c1a2e3abb381a36696aeb3588a2604706e88b8505caddbdb696f96249e6231\",\"dweb:/ipfs/QmQvPVUFGBRpbaK9et2L7rVVmCByD1gDhaFvtJNL7cM7d2\"]},\"node_modules/@latticexyz/world/src/codegen/tables/UserDelegationControl.sol\":{\"keccak256\":\"0xa9a5ebaa93ce6fe8b1f2cef5fd1350ea755d2ab0ff7ae2a5c369e493c2d205d5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5ba46cddd36f4a69e120e11edb0cbb8cd8d8363636544fe21e9712e41786f231\",\"dweb:/ipfs/Qmc87CiTYDULyEwTZmbfHcrqx2gNRrkSakYdS6wRXi7LQN\"]},\"node_modules/@latticexyz/world/src/constants.sol\":{\"keccak256\":\"0x07faffa7dc4a2adc4f9bfe93d5a59a7dd89241d360996537608e38f61c2d0588\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b96d4ce331b257a24de2f18503a11b986ed32d218810db9d5e3e7eddc17c2218\",\"dweb:/ipfs/Qme7Cw4RN1eaFWt2j3hk6ZMB7GWUfMY5oyZKYfMvAVxdBc\"]},\"node_modules/@latticexyz/world/src/modules/core/CoreModule.sol\":{\"keccak256\":\"0x1854f68cb404adb13910c7cb5dc91b4db83b33705a92717485df16742acfac43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1119dea8f6a76977e6327b789fae9023eedd63df9a50b6a7b4c6190f02de10a9\",\"dweb:/ipfs/QmXJ6YthgxX5ybpCgcECBHC2uPnycnC7mzh3KTbF9vZWDz\"]},\"node_modules/@latticexyz/world/src/modules/core/CoreRegistrationSystem.sol\":{\"keccak256\":\"0x4969fab8e65df062b3ee1d5c55c5dc980b4c8d531a90977e5f318500eafe2125\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca575dec2084e8ec0558c6866af383fea4f5111079f06db8c78b1a7dc78417\",\"dweb:/ipfs/QmZCHfyhMQ4Z4sJvW9uzYhuTNTThoRwH8Usqx6q95AbNSb\"]},\"node_modules/@latticexyz/world/src/modules/core/constants.sol\":{\"keccak256\":\"0xbe6408440b758884cfff869ae6c8aefa476ab97b07855dd51571bb358e9ecae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://854427618d6d700c2dbba45cc475bd341b14612d4dc05af687371dc725e0a11e\",\"dweb:/ipfs/QmXueKPv6WDyAwjwej5XHnBTMQeUYEbtgNryqt4Tnsj3sK\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/AccessManagementSystem.sol\":{\"keccak256\":\"0x29cd0f1a2ec749bc25774682977cad4dd238602a3b4e926cc08bb7781fabf2bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98d1f0b23e9ed303b543e943abcb5641d0744e2c1ae003df6dea877a070f96e0\",\"dweb:/ipfs/QmfQj5P8Lw6DfMfVnhsAaDCtN6iYfKp8V4uxX5LQQnzxLo\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/BalanceTransferSystem.sol\":{\"keccak256\":\"0x8170eb46e9716b8040b9a95d8740e1e897538afb1da95a1994cba7907522b4fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b19dbd9f3ca1f541883879985589095f851bdd201d9cdde2d6742dda9ad01a2e\",\"dweb:/ipfs/QmTgSMvsVFAEMK72D7myoJtEykDxAMweueJNEagSChyA1Y\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/BatchCallSystem.sol\":{\"keccak256\":\"0xf24b9cc96cccb8ef98c9aa8585e4a5c003b3b8a00c5a9c6db5c750460960a7d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://afa918bcba66835a0866a11c5b43b5da11d68fb68c697f89a273d5dd3a5f1f5c\",\"dweb:/ipfs/QmZyyVdNoUiyLMimmNkZkQv5o86k4sGyo1CGEMrt794eC2\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/ModuleInstallationSystem.sol\":{\"keccak256\":\"0xc9b0efce92d9be51ff564fa18efc13365a64cde8dd2e2ef88bac4abe7d432a3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86d2a49cc96ad7e783490c6e44aa2d078444505edc49d1061711200a607441a6\",\"dweb:/ipfs/QmbKkJnRkUE47uWwmhqqmaVozRXLt45ebSZbZnpJpnJfvj\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/StoreRegistrationSystem.sol\":{\"keccak256\":\"0xf7edf07894b8c6938b77491d36944d22b37b9e9e8105a689120f66e76450d3dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://55be67cb294109fbb9a323c5f788aa7d1b844f7bc57f5bed6b758d2d80447a24\",\"dweb:/ipfs/QmUv8FwmcV6mP2o7aZiZkRxrnQdnaRLYiFWs8ifaEadKJr\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/WorldRegistrationSystem.sol\":{\"keccak256\":\"0xbae6190d740add0ee986f82b1143f8f160d232e0f3c2eb4d7908040f07b45427\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://022b092b8757770e5799d22de9b09b774f6ecae9820e91847f794785fbdf7198\",\"dweb:/ipfs/QmaSUvvjFYZT2NmNUQJer7L9qAz4P1KJVQ8Z2Giro9Cpxm\"]},\"node_modules/@latticexyz/world/src/modules/core/types.sol\":{\"keccak256\":\"0x256b3269e1e7eb6c8b6e26432bbe6799b4d45a88ef1b0e795ea71e604cec3a8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99bf6320ce9671ed74e7352b4e6c462d741ca9a894c48b526e7d8513308fa6b3\",\"dweb:/ipfs/QmRFJcWFMDRkg7soJ4r4MrqacKmj16vUEMFEGWJuvFi4vJ\"]},\"node_modules/@latticexyz/world/src/requireInterface.sol\":{\"keccak256\":\"0x229777eeaac1099104e10832f59bc02f3494a5b6de8225810a3b175643d97039\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bf7e4df65be1808418d8dbb1decb346ec2a3b7a11b895818ae90f319522f795\",\"dweb:/ipfs/Qmco2UnqR9oop9ppY2Zbv1LWCQKGM99A7j6iWGsMCrwSmy\"]},\"node_modules/@latticexyz/world/src/revertWithBytes.sol\":{\"keccak256\":\"0x16795bdbfd7956d733df9ada1030ee7a1a714e3b9da5899149a7b07568c4af55\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a71128b4989e78215d5fc57dae8c2f84c6b5e503c159178c0df6f642b8228df\",\"dweb:/ipfs/QmNYTfBe62SdGESZ32fxME72CbAxEqk4j79jBT7655C4u7\"]},\"node_modules/@latticexyz/world/src/systemHookTypes.sol\":{\"keccak256\":\"0xdd201aa30700e70c35c1d4e50c375e511d798961183c8531f947c2d15969debb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9c165b1beb7c1d3f75107407c34a5b3424ec8cb322d494892bceed23323ffb9\",\"dweb:/ipfs/QmdH8rtgJaENsMc6HodAbahKg7PiZUJwoZufnHCw3TwrBx\"]},\"node_modules/@latticexyz/world/src/version.sol\":{\"keccak256\":\"0x5db84611779a814a582b5559f636640e3599dba1f36b99c529a19ce73b2d2d44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b06ae2f3b888ba3dc719b2d19f60deb7c3398324f636c9dad0b92706dfc08f5a\",\"dweb:/ipfs/QmaLgppohesJhF3ZdMWwM8NHcLiv8SRSCArS4QssfG2dC1\"]},\"node_modules/@latticexyz/world/src/worldResourceTypes.sol\":{\"keccak256\":\"0xc7e0aa6e4746b2d0e2eace7e462adf2f03dbc7f0c880794a577bfdbce426fcc3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7538caf090fc69fff272049cfc00d0f35ae63ee700c2091b9cc4ed5709a3b45\",\"dweb:/ipfs/QmYriK2VpsVAePPLTP6mDZkTYMT9AkgmC2C93ktjVMDaP4\"]},\"node_modules/@latticexyz/world/test/createCoreModule.sol\":{\"keccak256\":\"0xb0baab0e9c67c1b945a95291aed4e16cf73ed7b95bc671076fd1a7d960e043d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b603f7c656fed7e592cd598ca94ac46fab6ed31a6d951cf4661bc7f3f24166f2\",\"dweb:/ipfs/QmeNDUPYh3yuUj6oQ19VgKYruY1kDWenNhywzWYXeuxy39\"]},\"node_modules/ds-test/src/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/forge-std/src/StdChains.sol\":{\"keccak256\":\"0x51e6eb138fc953fac1ac78012a39b3f16d9289ce06a222ba93bb0621768f96e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://653c577e054cf578594148a07b286571d494f401b6d4a940d3ccabd47b29233d\",\"dweb:/ipfs/QmTWDVvR4m82MGXWYY8BCaVN89TguQJSLqRgzHzrMkFHtx\"]},\"node_modules/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x2e1b4b99283c16efaf155f7e55ea357943cf6e61fc02aad060534349f63b6cd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d471a35903e8a367a145ca5b5955caf691c723fe1117c6dcffd928d9f8d7c95a\",\"dweb:/ipfs/QmXGnFUGiX9APL8xit7NZQEYBoEL3wWyW1YyFoJQd2pGPe\"]},\"node_modules/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0xf5762db8ef95099bbe77578cd9349511ed77f4dd63ec98cc6b7cd711447830c1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6b0360806a9804eac0f7e07492b5db9c4953c521dabb9a11b17dd610d5b804c\",\"dweb:/ipfs/QmUFozSt3W7drBRdm1cdRow61EABqSLJtkvYZXWmoHUPss\"]},\"node_modules/forge-std/src/StdJson.sol\":{\"keccak256\":\"0x9e2a7521190c462a0667706385f1c52a816220a9813ca8ac520fba7ba45d660b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d23017fe6570b28130a731b86179352b93a5fb5af32f11559837afc1186293c\",\"dweb:/ipfs/QmR3p6zG5Kmcr8gKocFCSopLHfXv1AziPJbH17nKyMxwxV\"]},\"node_modules/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x391a28a2e54aea51a6fb03a3a48035304ca4d24bc669ddf3d4c152c7162e514d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://475fd0d87ccb0fdc4418dea2babffb4adb4aafb817e61f7ef31c2303f10c6c26\",\"dweb:/ipfs/QmQgcgtZxpkW6DRmbJszN1F8mU6zhaTZGdWWsj77yCuWN9\"]},\"node_modules/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x8758c42ba9d9e46868b796e2330ac239006ede07bd438a4b36dd6f2c47d27dc1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11f5752e0187b1e3631b875efdbe05d45929d05f1c1717105a9115d0a6628140\",\"dweb:/ipfs/QmUKkx9jfsUvjyYBw45RvrW1hTFXDXi2Jv5tbHP86mnzpi\"]},\"node_modules/forge-std/src/Test.sol\":{\"keccak256\":\"0xf3b62c75cea11a0e8ef8e6526e5e5c74ae47a892b9bcefc0e98d76066e1ffd24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a41faaf836453e02c71fc272c80b3c90a614b30c9ba636512db0d033c7b93beb\",\"dweb:/ipfs/QmeQAreYYaxztQtFLQdHCzCPEorj9T5foSu2hQmxk7xT5x\"]},\"node_modules/forge-std/src/Vm.sol\":{\"keccak256\":\"0xb569d0b4398fad95f508fb854e832143edf69a897af4250f5f60fe195a2066c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84b722ada97ea7bb841cdc0fa556aa36a02ff2d380fa24f6dc0717a71c6d9c7c\",\"dweb:/ipfs/QmfCH9Q4tvJhPM286GFsE4UCP4YncLpRu4Nwa2ZkHdRfbw\"]},\"node_modules/forge-std/src/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/forge-std/src/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"src/modules/puppet/Puppet.sol\":{\"keccak256\":\"0x8933512836ec527a90f1fd44cf01870b302cd5f080d1dc9f64ea11c41e46d2ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://854b7887821c26da985de13e8fb476bd8bd52c411284793789d19d34d9112f3b\",\"dweb:/ipfs/QmcHweSL5z6Mwro4dm4sLnzy7WmzdZud5yW7KQ36mnZTYD\"]},\"src/modules/puppet/PuppetDelegationControl.sol\":{\"keccak256\":\"0x8ba3488fee9e5503fa77b39609cfa2eed78be87636ada50e99094b0edc5a79e0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08214be4e0315011bb8c675c955f560865687d9129be342ab420bbb5d123f37b\",\"dweb:/ipfs/QmXFbsptKuD6fxKhhb7FatDBRE4seDnmefNB2WG6MEHHmW\"]},\"src/modules/puppet/PuppetFactorySystem.sol\":{\"keccak256\":\"0x47fc8ab186eba9b965c8cde4ff814eb9973302cbe1de6ee96f4539b62278fd85\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04eb1f7b3d964cefef88285546dbcbdc4f1c4e03d2364d37cdda5c79f9d9bb5a\",\"dweb:/ipfs/QmddEmBYqWtnd63FCZgnHz2ukk1ZFTwLv2bMkVYwsXTG5t\"]},\"src/modules/puppet/PuppetMaster.sol\":{\"keccak256\":\"0x7f94270573d344a1aea188e3920acab0f6c3befe9e7f27a1759df091f73db9e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc35076fb222a6e77a6968ef62856db69c4bb757f83f9849fe6abd8bb983002f\",\"dweb:/ipfs/QmVKRXYS1Xj1ckMZg6i9XPp8LbE4BXR8GL2XBfiFvnPnk9\"]},\"src/modules/puppet/PuppetModule.sol\":{\"keccak256\":\"0xc6a2f90c24976f7b3b6f342329bae302323549755b079e00a11266898e6f69a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd239b381ccb9b9387899f99f75d59e09d60020be65fe26dd7248309ae2597c5\",\"dweb:/ipfs/QmZVXo43p1Rao1H9eMdKuskkJQfiCUduDewrNRGuQREBHp\"]},\"src/modules/puppet/constants.sol\":{\"keccak256\":\"0x4196c01a6d6777b1387d69d7a310d54db2547edf747c07e8c6915752a27ea5ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://caf1b2b5df00f8896c29d6c105c19077a05e30ad1f61e950b445b38b77940a9a\",\"dweb:/ipfs/QmRohpQjvkoKn3WZvqERwwt29oTTBNggeX9nqoKtfqA6aS\"]},\"src/modules/puppet/createPuppet.sol\":{\"keccak256\":\"0x3ec80fa8b953772490089a2ec073109f4e06bdcb12ddc4f6501384340f64232e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://93ecfe683e78efc41c21ed5be647cb4654ccdbf38f8ef4358067f87b39dc997c\",\"dweb:/ipfs/QmTrt6U6BnykBBJqVmHQkgAxEcqZ6X5LHDQZgWVGVPR1X3\"]},\"src/modules/puppet/tables/PuppetRegistry.sol\":{\"keccak256\":\"0x26a6b1d36848665d09088daddc07b702d7eabed616742f2de658b84f049a30f3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://346f11ae7dfe0e9b13452e6e3fcd107e60a692528a7c5512b719c05277904448\",\"dweb:/ipfs/QmPT212GVCD9j8ZLLG49Ueq719a8TGynJ2fPsfjjGyuYSu\"]},\"src/utils/AccessControlLib.sol\":{\"keccak256\":\"0xb31878bda3f249c941719f6aa743bc739701418ed3effd2b5e6b4f28219e3f88\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a56bea3221f0663c35375beea4803b0d4ebc7e004828b89ef72c0cfec8e009e0\",\"dweb:/ipfs/QmPNZig8c2ou4uZFMjotG1CGT3ZcTU2aCt3C2RTSLkx3w8\"]},\"test/PuppetModule.t.sol\":{\"keccak256\":\"0x51a81a0d009fd6eb4d77c75a03788be0ef413bd114a1ede5f766b9161e3145b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3797e7482f2354a76d1a76a2db4842d865cbdd3eb31a009e35abed1bf62b4e6\",\"dweb:/ipfs/QmaTd6h5cXkMeGurBppUEgo7m36F58eJ2XfEu7RtrGjhmk\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"msg","type":"string","indexed":false}],"type":"event","name":"Hello","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testEmitOnPuppet"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testEmitOnRootPuppet"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testMsgSender"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testMsgSenderRootPuppet"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@latticexyz/=node_modules/@latticexyz/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/"],"optimizer":{"enabled":true,"runs":3000},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"test/PuppetModule.t.sol":"PuppetModuleTest"},"evmVersion":"paris","libraries":{}},"sources":{"node_modules/@latticexyz/gas-report/src/GasReporter.sol":{"keccak256":"0xf0b03a19a92cd2e9950c25b6d307e5aeca4a64be8932194431197d0570e9bf3b","urls":["bzz-raw://ef2a14f0fb6e5bcab0c70d3648d247c3919c63eabc8b226be4d1f359d8af860f","dweb:/ipfs/QmXi1HgeUNmS9GwSFMDJa8QVT7KiENG9VjgBB78hpHrHV6"],"license":"MIT"},"node_modules/@latticexyz/schema-type/src/solidity/SchemaType.sol":{"keccak256":"0x770eff7a38b9b7b1613dc11ca09db4f28b42a117c9b39b2a06a650a58a250bdb","urls":["bzz-raw://39f544110658a53def52c2a4e33b8b158b95a4f14fccea58d5268b6e728d86d4","dweb:/ipfs/QmTesj6tjSFbfAiKUitXapdNYWPStS8bLkB3r22qfyHwUC"],"license":"MIT"},"node_modules/@latticexyz/store/src/Bytes.sol":{"keccak256":"0xe0bc789337c31551a3ad42fd63aba2489a3aa8567d9f3140b3abc9abdc0d2f1b","urls":["bzz-raw://6d5313aaa217e563083d9e4ded9479d673b17ba71a189b6a0315839812a5c57a","dweb:/ipfs/QmQJfHFMSPrS6p6q3rzKX6HDNCVsQQAWxGdd383FSfKChd"],"license":"MIT"},"node_modules/@latticexyz/store/src/FieldLayout.sol":{"keccak256":"0x7335db1982f43f867f90c3e151e3cc6d6ad40ee76401e2e06b8fdff257d6526f","urls":["bzz-raw://a49d381ef0a0defc90f41166bc7f45cf31e8d82d1517e6a323a90e79b4e45d1f","dweb:/ipfs/QmP46aGM8cYPkn6C4rGnrumcg24g7aUzCAez41zPs2rqhx"],"license":"MIT"},"node_modules/@latticexyz/store/src/Hook.sol":{"keccak256":"0xbe6448092b2d0c77a7cb282e8a452732587a6e04802ad21f4da27a9d6ef1496a","urls":["bzz-raw://1d098409f9352637599b897d046ad23e20894ea3a8460687df2a13d2d960966d","dweb:/ipfs/Qmd3w6dSq3kQVQQtH94wcKRzkaNEDWcE2m9bgbWWDqNE3w"],"license":"MIT"},"node_modules/@latticexyz/store/src/IERC165.sol":{"keccak256":"0x2bbc3c43400c15a91a5cb35430a91309cb64a4d13a0a170eacec71dcf334feaf","urls":["bzz-raw://f44dfc9605067de539de07a76a34bf469faa9e6dad8c192abafc2e05860c7dd2","dweb:/ipfs/QmX8xgG6XWokM7YFwFZvmMhuh1uhkSjxCMD2oTHjUVdapb"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStore.sol":{"keccak256":"0x9092b65551d0f910e5645cebb5acadb387cdd192d75fa89cd6b293bd65b28827","urls":["bzz-raw://478825a6f7eff9ddab968e71e1d55ebee279d3b318f10976d9334384000059c0","dweb:/ipfs/Qme7NY976woRy3RQjE4tkkiwoXnoVtTmER3PbWCSbjZ2kb"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreData.sol":{"keccak256":"0xa8eade05c551aeef35c84727d7a44af239516deb2d8a0cfb7ebeb5d88c6995e5","urls":["bzz-raw://5335910bd8a204abb5f4396fb911a5ee5c221bd7fa63b1cc8ae5e737c6458c6a","dweb:/ipfs/QmckkCAfrNcWo3yDxoD1jCe1k4iDA2GzVDpFjJZs7W79vx"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreErrors.sol":{"keccak256":"0xb9070663ded3cad82285bb7610949e422f88abb48c2ddbd792af83d127d64212","urls":["bzz-raw://830490f1c888bec86df1e7ef43773d60ebdbdfdb2b91ab7fe074e2f38d7439dc","dweb:/ipfs/QmS26fpXdZuGgMmjcdQDf9k1Bedn2dhjk9byFZJoNkctPZ"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreEvents.sol":{"keccak256":"0xdd3104680808f975462a85cbd4fa87783ba5395797419caeeca37e8f8627a16f","urls":["bzz-raw://943864b7eb16ad2047ade5a8598e85c8a4b46d1aed6aef02bfb7cee8de732b4d","dweb:/ipfs/QmTEij4caToSNk15PFpubXYDy9QhwmPyP9tMXjUse2cTdv"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreHook.sol":{"keccak256":"0x9c3ba4c889db2cc2155ddfc966f5df45cf73739cacc358e0ed71ee9d34d9cef9","urls":["bzz-raw://0bc8e8abc3d5ce2af06c3a9f37ebe69cb287514c4572327b09d26121133646e5","dweb:/ipfs/QmY7BmHTiGAJabiLZXLx2zsRs9HfZzK97kwmnwfCidcHZ5"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreRead.sol":{"keccak256":"0xd2180d53ecd31069b1166f170ecdcd85917ac50f45fc26fb39b49cee7ba00e37","urls":["bzz-raw://1494bb0a3228e2d194bddaed4761fd3ca865979f0e3f3a53acd271143a4aa0ac","dweb:/ipfs/Qmaddnzzmu99iP9dTWK9ZeByh5dZyjY9SpVnRdvyr2fBAo"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreRegistration.sol":{"keccak256":"0xf448fbb2bc9c982721a43234463656da5a49cea08543e62148d54f11e1ac3e2f","urls":["bzz-raw://64b3579d9b9dcd73dca2beab3d4fcf60237420945ebbb2e9f4ffcc88f4110115","dweb:/ipfs/QmaW5nN3zGEriSYHncye6Nz2TkAw1oo1CyG2JuJTJrJoXg"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreWrite.sol":{"keccak256":"0x8b6c7af5ee330928aebb58c8872d3944304ee10ed11f8a325b6accc4ec5df81b","urls":["bzz-raw://b866d158701c7a40834bed735194b804ef219f2bbe574e2307785fff7bcf9da1","dweb:/ipfs/QmXzJfZkXVfyr2RFGwDuazeVnV3UWYmQxjKZ3KzFbbe75U"],"license":"MIT"},"node_modules/@latticexyz/store/src/Memory.sol":{"keccak256":"0x69295976e61a1a108d1b4d6eb497b238730309f3047c4320d48e01a0ce8d4ec7","urls":["bzz-raw://559c451b21fb9dd4fec27b41bef42f4362f1e7ebb7992106d548b9d4f733b3e5","dweb:/ipfs/QmeSE7YTW5zUrfZYFVb2pFnDe3XxiT8XNecfwC3wfpxCRv"],"license":"MIT"},"node_modules/@latticexyz/store/src/PackedCounter.sol":{"keccak256":"0xf2ac4fe9b94aba49819b8bfd9952a73e21bd30aa956aa3a0ba4333d0e4891e91","urls":["bzz-raw://c41b0bb60c662aab1287d0ec92cdd7ce07e6a732ed8d5e6045e14c7ba49d4ce8","dweb:/ipfs/QmYMHVsvJpDrpFW24uHmJFjA8tbr7WjyP4KAFnroApP7Br"],"license":"MIT"},"node_modules/@latticexyz/store/src/ResourceId.sol":{"keccak256":"0xd886462cb60be5929d17bed2740225effa8149ef6358378e9e1f385d58673be9","urls":["bzz-raw://6f66f49397097f9445159417fb61bd362de7849b1e572a3a9b5cb0536636a3d9","dweb:/ipfs/QmPYEREcaUyoqykx4hjJG4k3P9HYmAM4gAxvGsJT6yWqvn"],"license":"MIT"},"node_modules/@latticexyz/store/src/Schema.sol":{"keccak256":"0x58aef318ba03f8ff8866ef70f8a30f549b150657ea699734aefe16c298956401","urls":["bzz-raw://7dc104690a7e2bcf5ce1afadcd58f8ef4d639b4b92b9ad9293656235d54395f3","dweb:/ipfs/QmYJJvEv5KBJ3kzf9AkgRn7Uu5dp4exGTRddf4cae1btgE"],"license":"MIT"},"node_modules/@latticexyz/store/src/Slice.sol":{"keccak256":"0x08f813a47c9b17e647c4051b310fb7b04e2af87c5440f4c916e4e6b5bfb29710","urls":["bzz-raw://0a7966452656a25e3555e39f10121a69690b0ecf23524c073f61f9ea31a922f3","dweb:/ipfs/QmQiEsLYyZFBZbcAbzwSK2dKxpj7xbs7CPLt3py3uGZSSN"],"license":"MIT"},"node_modules/@latticexyz/store/src/Storage.sol":{"keccak256":"0x5a32d464b56d13b9cf93f15c366e1ba8c4e2242bbad3990829c7f674e49ac2f7","urls":["bzz-raw://adf1460050534fbdf4b2615c9dee03aed9d84bc0198cb082b10e579ab01d568e","dweb:/ipfs/Qma2zugjeP748bkmbYhqVrzrKcdn18KLH3TZMfVuhHq2M4"],"license":"MIT"},"node_modules/@latticexyz/store/src/StoreCore.sol":{"keccak256":"0x6f21b3b6e6c202a1f9a5ba3ce7a656d38b51e1f1755a7ba3d1bc4c083a94aa94","urls":["bzz-raw://e5499fa030ff8dee5db70851dc678a9f0eb7c2a548f27fd5a3ecd0b44038642a","dweb:/ipfs/Qme3ZGKP1YYMt98rFJ8uRRZ2jgWaqNdKAS9HaEP4HYPrB6"],"license":"MIT"},"node_modules/@latticexyz/store/src/StoreData.sol":{"keccak256":"0x4e451128c33a01d520c1944b3db42a62c158aea8fa11e786a58a0f719a189526","urls":["bzz-raw://c2f98f30a7b2c9ef020e274b87ae0fa66d1380343a00ecf6bd796ae31cd9b279","dweb:/ipfs/QmYXHSBn4Hp7cimDLKy86ep23v2VRUS6dLPevcVMs3dJrw"],"license":"MIT"},"node_modules/@latticexyz/store/src/StoreRead.sol":{"keccak256":"0xd918972009bd009dbad7032b8ff076928cec18c0891bb12493a1799df83e9cfa","urls":["bzz-raw://966bb2090623b9a6aae0e5df9ae4c9c21bbde97867a239303c934c765eebf738","dweb:/ipfs/QmRui6vJ8UfNHAueDyRuSXfW7wwuxRxAHgGjB7wVJEB6cJ"],"license":"MIT"},"node_modules/@latticexyz/store/src/StoreSwitch.sol":{"keccak256":"0xf132af10f960a498f49c0534027056e715f4bdcb8fbdb53ac6879c92309ab416","urls":["bzz-raw://e85a09aeb7543bcd9d74b7ad319ae61e1f7f15a6a0ad9e79aff750fbd18111c7","dweb:/ipfs/QmY6xgqeeaR1FsCPLmFbVgjm1D2UyrXNABKXWLfFaSmBhR"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/index.sol":{"keccak256":"0xf337a5abb2d43ef00c1c200e7fbec30fc89c7c701e457ab4277194b700d2aea3","urls":["bzz-raw://eccdf6158076b4e8f1b587a0310228f53323705e054a44eaa7733f38805c3ee6","dweb:/ipfs/QmbXEVNTctg54dK9awdCVyAjeuUjR6ckfmmXBP8DrFmjyq"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/tables/Hooks.sol":{"keccak256":"0x6ba24d7c79f616a40a5a28466a113c3b491196ed43a236124ae9f52f940ebae6","urls":["bzz-raw://c055a11a1a52d820e5f71c1434b94b2083304d94655d7dbcefb7c7b4e42a095f","dweb:/ipfs/QmUU119ZHn9S3ExK8ZhNyHbdxWMu3RasLDZco9vR9KDQJw"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/tables/ResourceIds.sol":{"keccak256":"0x0d5cb177f2e3f968b5d8962727ee95f6ec12f2f02635bd3388e8ba658a513782","urls":["bzz-raw://6c1f989b97f782ba8a7b7aa85c79564a4eeca21e8c0c255d287d5a2fb42700e9","dweb:/ipfs/QmXVeQ9p6b8GRMYE8QWPR89xRsMWRQsxPMgQHsUvMWbLeb"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/tables/StoreHooks.sol":{"keccak256":"0x92e5306a8572903c6ed2ede4713de8356221511aaa9043a115010d8dc504d95d","urls":["bzz-raw://c36a58e47472e86c8b995c33eef1be95c7073d30e8e4b59b4c65413cbe34f695","dweb:/ipfs/QmaHP8apm4XnMSQkMT4Wysu8LxVSnH5JcPne5PV8YPyJNv"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/tables/Tables.sol":{"keccak256":"0xc1ce9530a25c9e1ebc6a4d1789f26b9607f09b38132a64ced9cfcf34e3011e91","urls":["bzz-raw://d67414de99946c6c199fce2700a2765e279d4fa9c0ff665035193883221979ee","dweb:/ipfs/QmViGZuPahjSGa18UtAjSXbAao9wuMK4m6hxjtX6pDqqU7"],"license":"MIT"},"node_modules/@latticexyz/store/src/constants.sol":{"keccak256":"0x9e37c64c119ef07ad914bc589ee3f6d67946ab95877978c1ee3e2c1ffae07076","urls":["bzz-raw://3fad47e542025382aa28e8171253e34f93b2f149434b67a26989542d70218793","dweb:/ipfs/QmW6JsKNwPc6oAMrgcikgR2EPwMUtQANiuZSQSGCd29HHC"],"license":"MIT"},"node_modules/@latticexyz/store/src/leftMask.sol":{"keccak256":"0xe050786c52cfb1da012bba86744d2a89f8aa6507342e498c96fbe013b0d6302f","urls":["bzz-raw://a62d2f8eb85ddc6de911a0b415bbcf666001ecfd15e681f718cb9ae053a3a793","dweb:/ipfs/QmXZHfKXZNQRJMqLpS15kgZgMfMUkoB8FhypDWDaYaqtJG"],"license":"MIT"},"node_modules/@latticexyz/store/src/storeHookTypes.sol":{"keccak256":"0x60880298016fa117ed9a43ddfd020f11d98a2d345bdcb08e5884e40df98eddd5","urls":["bzz-raw://3619dfda1fd514c0fc5fb34c14d5b5aa41dd6ba6045d37d5f4c8199f3a826f81","dweb:/ipfs/QmbzRBYfVa423gNzCitpGN3i2N9oeGYfinVE1jgtqxnNZX"],"license":"MIT"},"node_modules/@latticexyz/store/src/storeResourceTypes.sol":{"keccak256":"0xada1867ba72930fc5cf5562dd4e36de849dbac9c833b7969cb1b046a808fabf2","urls":["bzz-raw://6e4b5fdcaa54f567a3f8561c2c3fbc0d68c8dad892a4a8e5418bbce8efc53d84","dweb:/ipfs/QmTWbYJX1yrCqrEwUKB9rGpHdRvLNU8GCkBbxnLjGD4d2t"],"license":"MIT"},"node_modules/@latticexyz/store/src/tightcoder/DecodeSlice.sol":{"keccak256":"0x1af0fd984640123391ec2df855d00298504b7ce186a56c2caca769cfd9e08e04","urls":["bzz-raw://7305a62318890d2cc6420ba7dec13d9f2c1cb67ac689015fc83b9cbccd0696f1","dweb:/ipfs/QmR8jGNLbt64Tv1YZKRVBCVsd71oeUQFzGHHtpsrs4PuRq"],"license":"MIT"},"node_modules/@latticexyz/store/src/tightcoder/EncodeArray.sol":{"keccak256":"0x1c280d24360282e196d9c4833c58c2437108cea2af0ac7596f95be81389e306d","urls":["bzz-raw://6b4556b6eeae9328fbd9adcce346547e823c397503276a4d63effb67e00b5b49","dweb:/ipfs/QmUsynVsMYzjh8oJR8YB7SRrwFMdXcsQsHBrXxLEEFxsiB"],"license":"MIT"},"node_modules/@latticexyz/store/src/tightcoder/TightCoder.sol":{"keccak256":"0xca2e2218bccd60ed690f29152b234a553f3021cad4903c0cfb5cf757fa41d650","urls":["bzz-raw://65f3bf5b851072ba1367ec74b3c66cab6185f3c8c8d6ada007cdc8c513465d25","dweb:/ipfs/QmdHsBNc7ccvTK7VDB9yAktdbRNBrEsUdBNFZTqdq8Vao2"],"license":"MIT"},"node_modules/@latticexyz/store/src/version.sol":{"keccak256":"0x01029999a48b7c1d85de84cae465dd24ec126c95b8a865cd20c7ed5dfcc0f02c","urls":["bzz-raw://9750164ce996badb0fd7df2f526780b9cb9558912405fe46f31064bd7c522491","dweb:/ipfs/QmYf8m2ZXFANRc9ysHgNkNtSF327ccxKYjCUJ49UXBKADk"],"license":"MIT"},"node_modules/@latticexyz/world/src/AccessControl.sol":{"keccak256":"0x963a4fc3983bf92a473e67f49b62b8f52d94360bb904664b24bbff844e6a4a41","urls":["bzz-raw://2cf0ea9f68a1a9738b116259dc2cb06e98cc591d82b2c271b0e70e8daa742952","dweb:/ipfs/QmRVxuBtGgw49v3KGm3HTBNS5ZJ9wEvENwipJEFEtoiaZ4"],"license":"MIT"},"node_modules/@latticexyz/world/src/Delegation.sol":{"keccak256":"0x09324c2d43eac847a312e1879de1019d1b6eb333d9c9e0d42c449d76f5d9fc89","urls":["bzz-raw://bd6f751c31f1305ffb328b1cd4bcc3999439f63f2b8ad9a33bbebdccdf60e716","dweb:/ipfs/QmRfj5xWwC3wzFr9iAQBr1pAQmLYPJhDRXyRcJpYfhDdoE"],"license":"MIT"},"node_modules/@latticexyz/world/src/DelegationControl.sol":{"keccak256":"0x1ed755a4addafd3d0fd1b527d46ea9951920496f8104fa836b297b2544d6fed0","urls":["bzz-raw://a55b1fa9ac9bd53177d529fd9a000d5e4b455a6aec23004c71365d352c6e6fda","dweb:/ipfs/QmWhetkDnCTiyi8C6qZf23misxJfnGWjesStFZV8sdD8oe"],"license":"MIT"},"node_modules/@latticexyz/world/src/ERC165Checker.sol":{"keccak256":"0x26204bcfddbc272eae391f4512a629f53697867d582ea8cabcd6a8e04a255270","urls":["bzz-raw://46944bac8253250ba3f645a6164df8e996738bc76a544867677e54ede57619a1","dweb:/ipfs/QmY1XSxQY9MuQSEvGaeQT6kqmeJ3VhYyRRTfzCkRmdsWsX"],"license":"MIT"},"node_modules/@latticexyz/world/src/IDelegationControl.sol":{"keccak256":"0xbf3da1c6ab38b3db62a4f4dd0235280d1fb07d8d465a145d6fd9eaf4bb4c3553","urls":["bzz-raw://30205a69d660ed8de5bf34ee73ec9033737d544bc7572130c439b2467606469d","dweb:/ipfs/QmUWTNdSW1bxXjaQzMUCLqBBoLYYre7CgDko4Qy12DaRNS"],"license":"MIT"},"node_modules/@latticexyz/world/src/IERC165.sol":{"keccak256":"0x7997ebbdee6a2493f28e7032c7a8b906ade40f807d95734e2653c8f1b023ff47","urls":["bzz-raw://c8ca41bb2619bf27e5bf886d1322f0e2dffd096c49f7ae6e716541dd1e1ddce5","dweb:/ipfs/Qmb8zATUWWTtiWaSLjbAe6PGnJPes9ANvEyk7pYoWR3P3Y"],"license":"MIT"},"node_modules/@latticexyz/world/src/IModule.sol":{"keccak256":"0x9ace961d4e283e0974762fddb14bb15e256d1d1086c813957fa0a0c9abeca900","urls":["bzz-raw://3ce3e6875d5ae61e12f3a36b8cdd2aa42e137f4d356109f89101fc7ea2d38f35","dweb:/ipfs/QmbCarvuyKZhaEKebPnzwxCrXPGZvZB5AnJxfXgCgex9py"],"license":"MIT"},"node_modules/@latticexyz/world/src/ISystemHook.sol":{"keccak256":"0x96b32546011ad67c3d03815dfd9375e9f8a255f98aaf89880afa1c8548d372b9","urls":["bzz-raw://c58294560e554b8d8c6e3e870768523aa034631d4908ce25e730bb372ce7795c","dweb:/ipfs/QmU9KfaZRNmQdoZE5bNrMN6QJCm7HGfsCBPvBGbMLLq9E5"],"license":"MIT"},"node_modules/@latticexyz/world/src/IWorldContextConsumer.sol":{"keccak256":"0xc7da95c29b6dc76d21ea866139e4cefeceeec094326811a4e5afafe494d6a881","urls":["bzz-raw://3048f85d42046b460ff285e38091a18ff848a489670e278b233669baecc2d6ef","dweb:/ipfs/QmPbeYVnPefPmtpaXXAGAjEGXjducZf9sF8fKqgfENCpwj"],"license":"MIT"},"node_modules/@latticexyz/world/src/IWorldErrors.sol":{"keccak256":"0xc3e7975e5785574543229eac51e3441f4185863d7f5346c0ae08a27b4541f8a7","urls":["bzz-raw://62cc0dc109e6e5475bb07fb95643a31c74337c23521db0557a36dad6117a1e83","dweb:/ipfs/Qmb8jbE1XQTUdreKFr4Jw3xmjctaLuReRZjPxZKQ2uW9p4"],"license":"MIT"},"node_modules/@latticexyz/world/src/IWorldKernel.sol":{"keccak256":"0x9dc133cb55dc23fd6fcbbef8078bb4ea9bf67d698400cf89fc62b905b60cf5eb","urls":["bzz-raw://7c1a57df7052218483eafe72d873660f39a73e2e06c1b14ad8a579d85b94bc6c","dweb:/ipfs/Qme7dnjvADGZyM2L7nZ51nSjsjXXF9isTVCpWaUCd1cEGs"],"license":"MIT"},"node_modules/@latticexyz/world/src/Module.sol":{"keccak256":"0xd0060c58956a1fe0855bcd9099e8764922f0d3b96f9683bd9622b8da05524f19","urls":["bzz-raw://6098c318c6b2606aa0a31554c6dd5923b6c106c24daa2f1119311cd4f4e47bce","dweb:/ipfs/QmZTSSpfmNWakCYvFFZhd7zjmnkNPuSeYKhfCQwZ2gjRWL"],"license":"MIT"},"node_modules/@latticexyz/world/src/System.sol":{"keccak256":"0x7bece0ec86fdc458054e6db0ac4316fc98882fa3ba76b2fa107d3de5382053cd","urls":["bzz-raw://d154183426723bbf133d4dc5f8d051e9521f7b7cabe63925731fa4af99379cdd","dweb:/ipfs/QmZXxPGcqknGLCwTByaZFKhqvKbrfiZkywmnh8buGTC2Mc"],"license":"MIT"},"node_modules/@latticexyz/world/src/SystemCall.sol":{"keccak256":"0x2ec34d896ea59d4bd47b99c1c1476c9c8f94f21d8af5f35ceebfeced4dd48ec2","urls":["bzz-raw://97dc97678b209c5e69d8b45adb3fe8c8d8b8fffbd725a8deb462c790a6a58a01","dweb:/ipfs/QmbUntQJj9n55PDjXcdJtmsWSPdWzyhbe6UCK9iHJuq3XM"],"license":"MIT"},"node_modules/@latticexyz/world/src/World.sol":{"keccak256":"0x2fa1e13f367a2110bce824ed5fc8b3d74cf60b0075492a7831dc887fc47de54b","urls":["bzz-raw://a7afd2c5fddf3d635a25a03aeb34991036ec8a9a59f44ea323f8c1f3f17bbf14","dweb:/ipfs/QmbYiNvJmD8mCjeAY83Jebb54dTcgYd4Knr9jbKnMcDwf6"],"license":"MIT"},"node_modules/@latticexyz/world/src/WorldContext.sol":{"keccak256":"0xa11d93077d94f18683f1098b69c4713a48001ae15054476135ec9569041abb9a","urls":["bzz-raw://9b1d3384def68b4061c445b55602dd9cbcd4e8c58c13db5e945f284a05c1b518","dweb:/ipfs/Qma5DUZrSKZUxrxiGCpyRPWMJNdHU2wu6qDEsFWEJSnLfN"],"license":"MIT"},"node_modules/@latticexyz/world/src/WorldResourceId.sol":{"keccak256":"0x7daa706e844ddc2ffa9ff2197139fa73faee614030c5d541e339c219129005ff","urls":["bzz-raw://62da4413068810e6fa32ef87b2a83386a0084ec2bb26722515127e5893281cbc","dweb:/ipfs/Qma5SLsHRq3igdXfKz24XSGfMd3dXyNxv52WSTsrcLRWPV"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IAccessManagementSystem.sol":{"keccak256":"0xc912f14d0f2e2e9e728a9d18e250ebe3eb2f51d0b4d79993c9d997991bbd5593","urls":["bzz-raw://29621425847a1c11205307896b04e2a6c97934dd619f23ce6774ce52520f1255","dweb:/ipfs/QmeuTe3q8U11Dqkp5tahxVWnp9Cd5ezQmRZ5vhEHtv14Eu"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IBalanceTransferSystem.sol":{"keccak256":"0xf04594c29c5c5b3110453ac189a8008735753de864ab4a7dfa97ccd3ae5f4a55","urls":["bzz-raw://4a3061f72b969a294dc96c3b2e59277e762ce6571cedcc7e280412431453dde5","dweb:/ipfs/QmWB9aboakrCH9AmzGiZ1mCceh9atF4ks5ndEYFzUVbaHT"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol":{"keccak256":"0xf103db760a912d42dac0c409feb2d1929864ae81f89a7186047ea6f98b9db2ed","urls":["bzz-raw://9ee556bbf7f7aa2f221e1f5a9d80caca8d4e5bc9282f59d5611a7c9ea7c06024","dweb:/ipfs/QmQouopBhk5VuzdUSVc9MC3C5nhbm1MgHmQhemf6w66WxE"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IBatchCallSystem.sol":{"keccak256":"0xb4d323470e22b1d3f0168a44196eb09466f602b7564c75e5739c5f53a5036f97","urls":["bzz-raw://acad752208d00b731baaa1cfa192ff3981001fd030953bdc604e4f69ec2cd0b8","dweb:/ipfs/QmRFw3RgmX2CHqg7PqsP3rqVKxBVYNq5hHcFiyA2Y7iAaX"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/ICoreRegistrationSystem.sol":{"keccak256":"0xb5e41596b245dbb0f4317174ae08c963a55df07cfd1a2e65bd082628bc446350","urls":["bzz-raw://007f0e50c7f40d3932c5db51f729148f7d67573ef2f429043d901c7b017d7f43","dweb:/ipfs/QmdmnY9RFyGjhmjSif3wZYHSMhtkTNhxi74dzVzsQBgi2N"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IModuleInstallationSystem.sol":{"keccak256":"0x5be1d1ee90a7a03258e8c4fce7542453332c637a51b015e0cc29151ef2792263","urls":["bzz-raw://df6d97356b2ca9d97b7593f4c0772742529fea73f1665e55a879a368b399cae0","dweb:/ipfs/QmXCs5X4Z95isKRzjP4TQjQxwiB7773tHiJWLWkjLv3SLj"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IWorldRegistrationSystem.sol":{"keccak256":"0xd7e31957e7fcf056912fe16e10a0411bdb071c14c45853e7da264dfbfd6bcb62","urls":["bzz-raw://c4ce02327ac8971177685fc2655733ed3c07f5dfb72846680544a48953180aad","dweb:/ipfs/QmQMNtkeCXdZfyyvtY8vUrKh5RUbpM7HYMGrzbxZGzTEFh"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/Balances.sol":{"keccak256":"0x2fd9727c04a06dacd957c320e5c91844e389df164a02f6c35e169852d974a1f8","urls":["bzz-raw://cfab99486f9011db6590d75947a8510540bc5d6160866cfd1fafe16daa024961","dweb:/ipfs/QmPAyaKJwhawWcyegfHv1QkJYzdAMpySok2gDKVPpw1rvD"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/FunctionSelectors.sol":{"keccak256":"0x8bcbbd417bc83b92c1d40444cf2e617d8a5c7e4d7486dcc3467fef2470338bcb","urls":["bzz-raw://aedd3d896ccc900aa9a4f53ec7a9245e5630f51e847a0e2356e12e4492084a8e","dweb:/ipfs/QmRQJwy5XYHGXT973hYdPUR6cG8fSDPi8kPgprYJXUfuVf"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/FunctionSignatures.sol":{"keccak256":"0xed3112d1dfeb8afa9be21cc3bf70f7af31b0443e9579f080e7ac2640664b8426","urls":["bzz-raw://571277bf66022fb97fb43948379b560c6d6904dc0272f91b30d3ab16a5b76c91","dweb:/ipfs/QmNhb9rrrW8KXzLfg3eiUR86hnRhaD2kzN5mAcWuWQ4pu5"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/InstalledModules.sol":{"keccak256":"0x334f30cf5cac3f795cd63f15582a6a50c91c91644000a1a5c3005a4c17b075ac","urls":["bzz-raw://79369df71ea24d4eb6579f9edc5ac3f8c8d4fe2563db7438c957f7cd8fd696d4","dweb:/ipfs/QmZBQv6xBpXWocxy4nX5o8XJYuvi88y69YmHJYUGgGFRN9"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/NamespaceDelegationControl.sol":{"keccak256":"0x760eec42bbfbdb497a80fa704956c82bca38d21ee220a1671ac7fc1364ddc0ed","urls":["bzz-raw://313982b1791750271b460fa94c3ea54eeb2d88b3093ab2cace6014a6c9ee387b","dweb:/ipfs/QmVagcNagZkFZeVieECp53rjZEYBB6LU8HP4BjKzfiC4Qr"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/NamespaceOwner.sol":{"keccak256":"0xb59422d88ec4d7ea5870bfbcd26cce216808aca2524d78be044e6246c2e0c8cd","urls":["bzz-raw://690489521124436a18dd3b2efc1c28636488414b82c6dabf743bde1c8f9ab70b","dweb:/ipfs/Qma89LxYq3aBdNZnsiH2qKuq47gmSn9QpeoFe23pahus5Z"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/ResourceAccess.sol":{"keccak256":"0xa6dd49d8d3bc8ce68d45ebc01f087ef83b1d758e9967322fd15cf641331c2527","urls":["bzz-raw://a80f0382a7bad47b1b947bc9b447eafb35599b0e11a9bdcb45c7cddb3bc1375a","dweb:/ipfs/QmRBWAsqUya6uxXn5fqJPgnkytDfp8HXixcymwTmYKuoPc"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/SystemHooks.sol":{"keccak256":"0x43cb675401e3e464a93ae0ddaefdb6ac03b734b7226ba89b8727d6421e50e2e8","urls":["bzz-raw://6a37a9d6881779113b1b78b0e9175b64089da881be1176fc764ceaee9fc65436","dweb:/ipfs/QmXgCyyJUAAn99Czgv51nkr6qi9hFduhJpybkn95ipJHJL"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/SystemRegistry.sol":{"keccak256":"0xd0128bfb43b2afdc0c0410b6a642ce7b5ae4e5c90c367e542ea0b3e8d02eba22","urls":["bzz-raw://59fd7075792470f625e15e7c7a5d377b6657b26ce22a82c705888c2773840330","dweb:/ipfs/QmdPygA9VW1Zdds4FTejEDSEKzaPWDFvXP1VqsaJB6KF8q"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/Systems.sol":{"keccak256":"0x20ad3ee26ef118cb8b055803c4a5ef2aac4791ce9e8720fc6a549120c53ab37a","urls":["bzz-raw://58c1a2e3abb381a36696aeb3588a2604706e88b8505caddbdb696f96249e6231","dweb:/ipfs/QmQvPVUFGBRpbaK9et2L7rVVmCByD1gDhaFvtJNL7cM7d2"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/UserDelegationControl.sol":{"keccak256":"0xa9a5ebaa93ce6fe8b1f2cef5fd1350ea755d2ab0ff7ae2a5c369e493c2d205d5","urls":["bzz-raw://5ba46cddd36f4a69e120e11edb0cbb8cd8d8363636544fe21e9712e41786f231","dweb:/ipfs/Qmc87CiTYDULyEwTZmbfHcrqx2gNRrkSakYdS6wRXi7LQN"],"license":"MIT"},"node_modules/@latticexyz/world/src/constants.sol":{"keccak256":"0x07faffa7dc4a2adc4f9bfe93d5a59a7dd89241d360996537608e38f61c2d0588","urls":["bzz-raw://b96d4ce331b257a24de2f18503a11b986ed32d218810db9d5e3e7eddc17c2218","dweb:/ipfs/Qme7Cw4RN1eaFWt2j3hk6ZMB7GWUfMY5oyZKYfMvAVxdBc"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/CoreModule.sol":{"keccak256":"0x1854f68cb404adb13910c7cb5dc91b4db83b33705a92717485df16742acfac43","urls":["bzz-raw://1119dea8f6a76977e6327b789fae9023eedd63df9a50b6a7b4c6190f02de10a9","dweb:/ipfs/QmXJ6YthgxX5ybpCgcECBHC2uPnycnC7mzh3KTbF9vZWDz"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/CoreRegistrationSystem.sol":{"keccak256":"0x4969fab8e65df062b3ee1d5c55c5dc980b4c8d531a90977e5f318500eafe2125","urls":["bzz-raw://94ca575dec2084e8ec0558c6866af383fea4f5111079f06db8c78b1a7dc78417","dweb:/ipfs/QmZCHfyhMQ4Z4sJvW9uzYhuTNTThoRwH8Usqx6q95AbNSb"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/constants.sol":{"keccak256":"0xbe6408440b758884cfff869ae6c8aefa476ab97b07855dd51571bb358e9ecae0","urls":["bzz-raw://854427618d6d700c2dbba45cc475bd341b14612d4dc05af687371dc725e0a11e","dweb:/ipfs/QmXueKPv6WDyAwjwej5XHnBTMQeUYEbtgNryqt4Tnsj3sK"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/AccessManagementSystem.sol":{"keccak256":"0x29cd0f1a2ec749bc25774682977cad4dd238602a3b4e926cc08bb7781fabf2bc","urls":["bzz-raw://98d1f0b23e9ed303b543e943abcb5641d0744e2c1ae003df6dea877a070f96e0","dweb:/ipfs/QmfQj5P8Lw6DfMfVnhsAaDCtN6iYfKp8V4uxX5LQQnzxLo"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/BalanceTransferSystem.sol":{"keccak256":"0x8170eb46e9716b8040b9a95d8740e1e897538afb1da95a1994cba7907522b4fc","urls":["bzz-raw://b19dbd9f3ca1f541883879985589095f851bdd201d9cdde2d6742dda9ad01a2e","dweb:/ipfs/QmTgSMvsVFAEMK72D7myoJtEykDxAMweueJNEagSChyA1Y"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/BatchCallSystem.sol":{"keccak256":"0xf24b9cc96cccb8ef98c9aa8585e4a5c003b3b8a00c5a9c6db5c750460960a7d1","urls":["bzz-raw://afa918bcba66835a0866a11c5b43b5da11d68fb68c697f89a273d5dd3a5f1f5c","dweb:/ipfs/QmZyyVdNoUiyLMimmNkZkQv5o86k4sGyo1CGEMrt794eC2"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/ModuleInstallationSystem.sol":{"keccak256":"0xc9b0efce92d9be51ff564fa18efc13365a64cde8dd2e2ef88bac4abe7d432a3d","urls":["bzz-raw://86d2a49cc96ad7e783490c6e44aa2d078444505edc49d1061711200a607441a6","dweb:/ipfs/QmbKkJnRkUE47uWwmhqqmaVozRXLt45ebSZbZnpJpnJfvj"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/StoreRegistrationSystem.sol":{"keccak256":"0xf7edf07894b8c6938b77491d36944d22b37b9e9e8105a689120f66e76450d3dc","urls":["bzz-raw://55be67cb294109fbb9a323c5f788aa7d1b844f7bc57f5bed6b758d2d80447a24","dweb:/ipfs/QmUv8FwmcV6mP2o7aZiZkRxrnQdnaRLYiFWs8ifaEadKJr"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/WorldRegistrationSystem.sol":{"keccak256":"0xbae6190d740add0ee986f82b1143f8f160d232e0f3c2eb4d7908040f07b45427","urls":["bzz-raw://022b092b8757770e5799d22de9b09b774f6ecae9820e91847f794785fbdf7198","dweb:/ipfs/QmaSUvvjFYZT2NmNUQJer7L9qAz4P1KJVQ8Z2Giro9Cpxm"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/types.sol":{"keccak256":"0x256b3269e1e7eb6c8b6e26432bbe6799b4d45a88ef1b0e795ea71e604cec3a8a","urls":["bzz-raw://99bf6320ce9671ed74e7352b4e6c462d741ca9a894c48b526e7d8513308fa6b3","dweb:/ipfs/QmRFJcWFMDRkg7soJ4r4MrqacKmj16vUEMFEGWJuvFi4vJ"],"license":"MIT"},"node_modules/@latticexyz/world/src/requireInterface.sol":{"keccak256":"0x229777eeaac1099104e10832f59bc02f3494a5b6de8225810a3b175643d97039","urls":["bzz-raw://0bf7e4df65be1808418d8dbb1decb346ec2a3b7a11b895818ae90f319522f795","dweb:/ipfs/Qmco2UnqR9oop9ppY2Zbv1LWCQKGM99A7j6iWGsMCrwSmy"],"license":"MIT"},"node_modules/@latticexyz/world/src/revertWithBytes.sol":{"keccak256":"0x16795bdbfd7956d733df9ada1030ee7a1a714e3b9da5899149a7b07568c4af55","urls":["bzz-raw://7a71128b4989e78215d5fc57dae8c2f84c6b5e503c159178c0df6f642b8228df","dweb:/ipfs/QmNYTfBe62SdGESZ32fxME72CbAxEqk4j79jBT7655C4u7"],"license":"MIT"},"node_modules/@latticexyz/world/src/systemHookTypes.sol":{"keccak256":"0xdd201aa30700e70c35c1d4e50c375e511d798961183c8531f947c2d15969debb","urls":["bzz-raw://d9c165b1beb7c1d3f75107407c34a5b3424ec8cb322d494892bceed23323ffb9","dweb:/ipfs/QmdH8rtgJaENsMc6HodAbahKg7PiZUJwoZufnHCw3TwrBx"],"license":"MIT"},"node_modules/@latticexyz/world/src/version.sol":{"keccak256":"0x5db84611779a814a582b5559f636640e3599dba1f36b99c529a19ce73b2d2d44","urls":["bzz-raw://b06ae2f3b888ba3dc719b2d19f60deb7c3398324f636c9dad0b92706dfc08f5a","dweb:/ipfs/QmaLgppohesJhF3ZdMWwM8NHcLiv8SRSCArS4QssfG2dC1"],"license":"MIT"},"node_modules/@latticexyz/world/src/worldResourceTypes.sol":{"keccak256":"0xc7e0aa6e4746b2d0e2eace7e462adf2f03dbc7f0c880794a577bfdbce426fcc3","urls":["bzz-raw://d7538caf090fc69fff272049cfc00d0f35ae63ee700c2091b9cc4ed5709a3b45","dweb:/ipfs/QmYriK2VpsVAePPLTP6mDZkTYMT9AkgmC2C93ktjVMDaP4"],"license":"MIT"},"node_modules/@latticexyz/world/test/createCoreModule.sol":{"keccak256":"0xb0baab0e9c67c1b945a95291aed4e16cf73ed7b95bc671076fd1a7d960e043d8","urls":["bzz-raw://b603f7c656fed7e592cd598ca94ac46fab6ed31a6d951cf4661bc7f3f24166f2","dweb:/ipfs/QmeNDUPYh3yuUj6oQ19VgKYruY1kDWenNhywzWYXeuxy39"],"license":"MIT"},"node_modules/ds-test/src/test.sol":{"keccak256":"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b","urls":["bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240","dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k"],"license":"GPL-3.0-or-later"},"node_modules/forge-std/src/Base.sol":{"keccak256":"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c","urls":["bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224","dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"],"license":"MIT"},"node_modules/forge-std/src/StdAssertions.sol":{"keccak256":"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60","urls":["bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b","dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL"],"license":"MIT"},"node_modules/forge-std/src/StdChains.sol":{"keccak256":"0x51e6eb138fc953fac1ac78012a39b3f16d9289ce06a222ba93bb0621768f96e6","urls":["bzz-raw://653c577e054cf578594148a07b286571d494f401b6d4a940d3ccabd47b29233d","dweb:/ipfs/QmTWDVvR4m82MGXWYY8BCaVN89TguQJSLqRgzHzrMkFHtx"],"license":"MIT"},"node_modules/forge-std/src/StdCheats.sol":{"keccak256":"0x2e1b4b99283c16efaf155f7e55ea357943cf6e61fc02aad060534349f63b6cd5","urls":["bzz-raw://d471a35903e8a367a145ca5b5955caf691c723fe1117c6dcffd928d9f8d7c95a","dweb:/ipfs/QmXGnFUGiX9APL8xit7NZQEYBoEL3wWyW1YyFoJQd2pGPe"],"license":"MIT"},"node_modules/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"node_modules/forge-std/src/StdInvariant.sol":{"keccak256":"0xf5762db8ef95099bbe77578cd9349511ed77f4dd63ec98cc6b7cd711447830c1","urls":["bzz-raw://a6b0360806a9804eac0f7e07492b5db9c4953c521dabb9a11b17dd610d5b804c","dweb:/ipfs/QmUFozSt3W7drBRdm1cdRow61EABqSLJtkvYZXWmoHUPss"],"license":"MIT"},"node_modules/forge-std/src/StdJson.sol":{"keccak256":"0x9e2a7521190c462a0667706385f1c52a816220a9813ca8ac520fba7ba45d660b","urls":["bzz-raw://7d23017fe6570b28130a731b86179352b93a5fb5af32f11559837afc1186293c","dweb:/ipfs/QmR3p6zG5Kmcr8gKocFCSopLHfXv1AziPJbH17nKyMxwxV"],"license":"MIT"},"node_modules/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"node_modules/forge-std/src/StdStorage.sol":{"keccak256":"0x391a28a2e54aea51a6fb03a3a48035304ca4d24bc669ddf3d4c152c7162e514d","urls":["bzz-raw://475fd0d87ccb0fdc4418dea2babffb4adb4aafb817e61f7ef31c2303f10c6c26","dweb:/ipfs/QmQgcgtZxpkW6DRmbJszN1F8mU6zhaTZGdWWsj77yCuWN9"],"license":"MIT"},"node_modules/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"node_modules/forge-std/src/StdUtils.sol":{"keccak256":"0x8758c42ba9d9e46868b796e2330ac239006ede07bd438a4b36dd6f2c47d27dc1","urls":["bzz-raw://11f5752e0187b1e3631b875efdbe05d45929d05f1c1717105a9115d0a6628140","dweb:/ipfs/QmUKkx9jfsUvjyYBw45RvrW1hTFXDXi2Jv5tbHP86mnzpi"],"license":"MIT"},"node_modules/forge-std/src/Test.sol":{"keccak256":"0xf3b62c75cea11a0e8ef8e6526e5e5c74ae47a892b9bcefc0e98d76066e1ffd24","urls":["bzz-raw://a41faaf836453e02c71fc272c80b3c90a614b30c9ba636512db0d033c7b93beb","dweb:/ipfs/QmeQAreYYaxztQtFLQdHCzCPEorj9T5foSu2hQmxk7xT5x"],"license":"MIT"},"node_modules/forge-std/src/Vm.sol":{"keccak256":"0xb569d0b4398fad95f508fb854e832143edf69a897af4250f5f60fe195a2066c5","urls":["bzz-raw://84b722ada97ea7bb841cdc0fa556aa36a02ff2d380fa24f6dc0717a71c6d9c7c","dweb:/ipfs/QmfCH9Q4tvJhPM286GFsE4UCP4YncLpRu4Nwa2ZkHdRfbw"],"license":"MIT"},"node_modules/forge-std/src/console.sol":{"keccak256":"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba","urls":["bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70","dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec"],"license":"MIT"},"node_modules/forge-std/src/console2.sol":{"keccak256":"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea","urls":["bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973","dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF"],"license":"MIT"},"node_modules/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"node_modules/forge-std/src/safeconsole.sol":{"keccak256":"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381","urls":["bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae","dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq"],"license":"MIT"},"src/modules/puppet/Puppet.sol":{"keccak256":"0x8933512836ec527a90f1fd44cf01870b302cd5f080d1dc9f64ea11c41e46d2ab","urls":["bzz-raw://854b7887821c26da985de13e8fb476bd8bd52c411284793789d19d34d9112f3b","dweb:/ipfs/QmcHweSL5z6Mwro4dm4sLnzy7WmzdZud5yW7KQ36mnZTYD"],"license":"MIT"},"src/modules/puppet/PuppetDelegationControl.sol":{"keccak256":"0x8ba3488fee9e5503fa77b39609cfa2eed78be87636ada50e99094b0edc5a79e0","urls":["bzz-raw://08214be4e0315011bb8c675c955f560865687d9129be342ab420bbb5d123f37b","dweb:/ipfs/QmXFbsptKuD6fxKhhb7FatDBRE4seDnmefNB2WG6MEHHmW"],"license":"MIT"},"src/modules/puppet/PuppetFactorySystem.sol":{"keccak256":"0x47fc8ab186eba9b965c8cde4ff814eb9973302cbe1de6ee96f4539b62278fd85","urls":["bzz-raw://04eb1f7b3d964cefef88285546dbcbdc4f1c4e03d2364d37cdda5c79f9d9bb5a","dweb:/ipfs/QmddEmBYqWtnd63FCZgnHz2ukk1ZFTwLv2bMkVYwsXTG5t"],"license":"MIT"},"src/modules/puppet/PuppetMaster.sol":{"keccak256":"0x7f94270573d344a1aea188e3920acab0f6c3befe9e7f27a1759df091f73db9e5","urls":["bzz-raw://fc35076fb222a6e77a6968ef62856db69c4bb757f83f9849fe6abd8bb983002f","dweb:/ipfs/QmVKRXYS1Xj1ckMZg6i9XPp8LbE4BXR8GL2XBfiFvnPnk9"],"license":"MIT"},"src/modules/puppet/PuppetModule.sol":{"keccak256":"0xc6a2f90c24976f7b3b6f342329bae302323549755b079e00a11266898e6f69a0","urls":["bzz-raw://cd239b381ccb9b9387899f99f75d59e09d60020be65fe26dd7248309ae2597c5","dweb:/ipfs/QmZVXo43p1Rao1H9eMdKuskkJQfiCUduDewrNRGuQREBHp"],"license":"MIT"},"src/modules/puppet/constants.sol":{"keccak256":"0x4196c01a6d6777b1387d69d7a310d54db2547edf747c07e8c6915752a27ea5ae","urls":["bzz-raw://caf1b2b5df00f8896c29d6c105c19077a05e30ad1f61e950b445b38b77940a9a","dweb:/ipfs/QmRohpQjvkoKn3WZvqERwwt29oTTBNggeX9nqoKtfqA6aS"],"license":"MIT"},"src/modules/puppet/createPuppet.sol":{"keccak256":"0x3ec80fa8b953772490089a2ec073109f4e06bdcb12ddc4f6501384340f64232e","urls":["bzz-raw://93ecfe683e78efc41c21ed5be647cb4654ccdbf38f8ef4358067f87b39dc997c","dweb:/ipfs/QmTrt6U6BnykBBJqVmHQkgAxEcqZ6X5LHDQZgWVGVPR1X3"],"license":"MIT"},"src/modules/puppet/tables/PuppetRegistry.sol":{"keccak256":"0x26a6b1d36848665d09088daddc07b702d7eabed616742f2de658b84f049a30f3","urls":["bzz-raw://346f11ae7dfe0e9b13452e6e3fcd107e60a692528a7c5512b719c05277904448","dweb:/ipfs/QmPT212GVCD9j8ZLLG49Ueq719a8TGynJ2fPsfjjGyuYSu"],"license":"MIT"},"src/utils/AccessControlLib.sol":{"keccak256":"0xb31878bda3f249c941719f6aa743bc739701418ed3effd2b5e6b4f28219e3f88","urls":["bzz-raw://a56bea3221f0663c35375beea4803b0d4ebc7e004828b89ef72c0cfec8e009e0","dweb:/ipfs/QmPNZig8c2ou4uZFMjotG1CGT3ZcTU2aCt3C2RTSLkx3w8"],"license":"MIT"},"test/PuppetModule.t.sol":{"keccak256":"0x51a81a0d009fd6eb4d77c75a03788be0ef413bd114a1ede5f766b9161e3145b2","urls":["bzz-raw://b3797e7482f2354a76d1a76a2db4842d865cbdd3eb31a009e35abed1bf62b4e6","dweb:/ipfs/QmaTd6h5cXkMeGurBppUEgo7m36F58eJ2XfEu7RtrGjhmk"],"license":"MIT"}},"version":1},"ast":{"absolutePath":"test/PuppetModule.t.sol","id":134251,"exportedSymbols":{"DELEGATION_CONTROL_INTERFACE_ID":[22169],"GasReporter":[226],"IBaseWorld":[24400],"IWorldErrors":[22430],"PUPPET_DELEGATION":[119469],"Puppet":[119055],"PuppetDelegationControl":[119095],"PuppetMaster":[119219],"PuppetModule":[119414],"PuppetModuleTest":[134250],"PuppetTestSystem":[134001],"RESOURCE_SYSTEM":[37052],"ResourceId":[2782],"System":[22601],"Systems":[33812],"Test":[58812],"World":[23730],"WorldResourceIdInstance":[24272],"WorldResourceIdLib":[24145],"createCoreModule":[46913],"createPuppet":[119572]},"nodeType":"SourceUnit","src":"32:3589:198","nodes":[{"id":133926,"nodeType":"PragmaDirective","src":"32:25:198","nodes":[],"literals":["solidity",">=","0.8",".21"]},{"id":133928,"nodeType":"ImportDirective","src":"59:42:198","nodes":[],"absolutePath":"node_modules/forge-std/src/Test.sol","file":"forge-std/Test.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":58813,"symbolAliases":[{"foreign":{"id":133927,"name":"Test","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58812,"src":"68:4:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133930,"nodeType":"ImportDirective","src":"102:73:198","nodes":[],"absolutePath":"node_modules/@latticexyz/gas-report/src/GasReporter.sol","file":"@latticexyz/gas-report/src/GasReporter.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":227,"symbolAliases":[{"foreign":{"id":133929,"name":"GasReporter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"111:11:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133932,"nodeType":"ImportDirective","src":"177:56:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/World.sol","file":"@latticexyz/world/src/World.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":23731,"symbolAliases":[{"foreign":{"id":133931,"name":"World","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23730,"src":"186:5:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133936,"nodeType":"ImportDirective","src":"234:116:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/WorldResourceId.sol","file":"@latticexyz/world/src/WorldResourceId.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":24273,"symbolAliases":[{"foreign":{"id":133933,"name":"ResourceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2782,"src":"243:10:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":133934,"name":"WorldResourceIdLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24145,"src":"255:18:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":133935,"name":"WorldResourceIdInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24272,"src":"275:23:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133938,"nodeType":"ImportDirective","src":"351:58:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/System.sol","file":"@latticexyz/world/src/System.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":22602,"symbolAliases":[{"foreign":{"id":133937,"name":"System","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22601,"src":"360:6:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133940,"nodeType":"ImportDirective","src":"410:79:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/worldResourceTypes.sol","file":"@latticexyz/world/src/worldResourceTypes.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":37059,"symbolAliases":[{"foreign":{"id":133939,"name":"RESOURCE_SYSTEM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"419:15:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133942,"nodeType":"ImportDirective","src":"491:85:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol","file":"@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":24401,"symbolAliases":[{"foreign":{"id":133941,"name":"IBaseWorld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24400,"src":"500:10:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133944,"nodeType":"ImportDirective","src":"577:70:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/IWorldErrors.sol","file":"@latticexyz/world/src/IWorldErrors.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":22431,"symbolAliases":[{"foreign":{"id":133943,"name":"IWorldErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22430,"src":"586:12:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133946,"nodeType":"ImportDirective","src":"648:95:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/IDelegationControl.sol","file":"@latticexyz/world/src/IDelegationControl.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":22186,"symbolAliases":[{"foreign":{"id":133945,"name":"DELEGATION_CONTROL_INTERFACE_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22169,"src":"657:31:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133948,"nodeType":"ImportDirective","src":"745:79:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/test/createCoreModule.sol","file":"@latticexyz/world/test/createCoreModule.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":46914,"symbolAliases":[{"foreign":{"id":133947,"name":"createCoreModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46913,"src":"754:16:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133950,"nodeType":"ImportDirective","src":"825:75:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/codegen/tables/Systems.sol","file":"@latticexyz/world/src/codegen/tables/Systems.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":33823,"symbolAliases":[{"foreign":{"id":133949,"name":"Systems","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33812,"src":"834:7:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133952,"nodeType":"ImportDirective","src":"902:70:198","nodes":[],"absolutePath":"src/modules/puppet/PuppetModule.sol","file":"../src/modules/puppet/PuppetModule.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":119415,"symbolAliases":[{"foreign":{"id":133951,"name":"PuppetModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119414,"src":"911:12:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133954,"nodeType":"ImportDirective","src":"973:92:198","nodes":[],"absolutePath":"src/modules/puppet/PuppetDelegationControl.sol","file":"../src/modules/puppet/PuppetDelegationControl.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":119096,"symbolAliases":[{"foreign":{"id":133953,"name":"PuppetDelegationControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119095,"src":"982:23:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133956,"nodeType":"ImportDirective","src":"1066:58:198","nodes":[],"absolutePath":"src/modules/puppet/Puppet.sol","file":"../src/modules/puppet/Puppet.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":119056,"symbolAliases":[{"foreign":{"id":133955,"name":"Puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119055,"src":"1075:6:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133958,"nodeType":"ImportDirective","src":"1125:70:198","nodes":[],"absolutePath":"src/modules/puppet/PuppetMaster.sol","file":"../src/modules/puppet/PuppetMaster.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":119220,"symbolAliases":[{"foreign":{"id":133957,"name":"PuppetMaster","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119219,"src":"1134:12:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133960,"nodeType":"ImportDirective","src":"1196:72:198","nodes":[],"absolutePath":"src/modules/puppet/constants.sol","file":"../src/modules/puppet/constants.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":119506,"symbolAliases":[{"foreign":{"id":133959,"name":"PUPPET_DELEGATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119469,"src":"1205:17:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133962,"nodeType":"ImportDirective","src":"1269:70:198","nodes":[],"absolutePath":"src/modules/puppet/createPuppet.sol","file":"../src/modules/puppet/createPuppet.sol","nameLocation":"-1:-1:-1","scope":134251,"sourceUnit":119573,"symbolAliases":[{"foreign":{"id":133961,"name":"createPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119572,"src":"1278:12:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":134001,"nodeType":"ContractDefinition","src":"1341:328:198","nodes":[{"id":133970,"nodeType":"EventDefinition","src":"1395:28:198","nodes":[],"anonymous":false,"eventSelector":"e762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d","name":"Hello","nameLocation":"1401:5:198","parameters":{"id":133969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133968,"indexed":false,"mutability":"mutable","name":"message","nameLocation":"1414:7:198","nodeType":"VariableDeclaration","scope":133970,"src":"1407:14:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":133967,"name":"string","nodeType":"ElementaryTypeName","src":"1407:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1406:16:198"}},{"id":133991,"nodeType":"FunctionDefinition","src":"1427:155:198","nodes":[],"body":{"id":133990,"nodeType":"Block","src":"1502:80:198","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":133980,"name":"Hello","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133970,"src":"1521:5:198","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":133981,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1527:8:198","memberName":"selector","nodeType":"MemberAccess","src":"1521:14:198","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":133984,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133972,"src":"1548:7:198","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":133982,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1537:3:198","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":133983,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1541:6:198","memberName":"encode","nodeType":"MemberAccess","src":"1537:10:198","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":133985,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1537:19:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":133977,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119218,"src":"1508:6:198","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_Puppet_$119055_$","typeString":"function () view returns (contract Puppet)"}},"id":133978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:8:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Puppet_$119055","typeString":"contract Puppet"}},"id":133979,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1517:3:198","memberName":"log","nodeType":"MemberAccess","referencedDeclaration":119006,"src":"1508:12:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory) external"}},"id":133986,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:49:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":133987,"nodeType":"ExpressionStatement","src":"1508:49:198"},{"expression":{"id":133988,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133972,"src":"1570:7:198","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":133976,"id":133989,"nodeType":"Return","src":"1563:14:198"}]},"functionSelector":"319585fb","implemented":true,"kind":"function","modifiers":[],"name":"echoAndEmit","nameLocation":"1436:11:198","parameters":{"id":133973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133972,"mutability":"mutable","name":"message","nameLocation":"1462:7:198","nodeType":"VariableDeclaration","scope":133991,"src":"1448:21:198","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":133971,"name":"string","nodeType":"ElementaryTypeName","src":"1448:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1447:23:198"},"returnParameters":{"id":133976,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133975,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":133991,"src":"1487:13:198","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":133974,"name":"string","nodeType":"ElementaryTypeName","src":"1487:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1486:15:198"},"scope":134001,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134000,"nodeType":"FunctionDefinition","src":"1586:81:198","nodes":[],"body":{"id":133999,"nodeType":"Block","src":"1637:30:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":133996,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23760,"src":"1650:10:198","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":133997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1650:12:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":133995,"id":133998,"nodeType":"Return","src":"1643:19:198"}]},"functionSelector":"d737d0c7","implemented":true,"kind":"function","modifiers":[],"name":"msgSender","nameLocation":"1595:9:198","parameters":{"id":133992,"nodeType":"ParameterList","parameters":[],"src":"1604:2:198"},"returnParameters":{"id":133995,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133994,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":134000,"src":"1628:7:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":133993,"name":"address","nodeType":"ElementaryTypeName","src":"1628:7:198","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1627:9:198"},"scope":134001,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":133963,"name":"System","nameLocations":["1370:6:198"],"nodeType":"IdentifierPath","referencedDeclaration":22601,"src":"1370:6:198"},"id":133964,"nodeType":"InheritanceSpecifier","src":"1370:6:198"},{"baseName":{"id":133965,"name":"PuppetMaster","nameLocations":["1378:12:198"],"nodeType":"IdentifierPath","referencedDeclaration":119219,"src":"1378:12:198"},"id":133966,"nodeType":"InheritanceSpecifier","src":"1378:12:198"}],"canonicalName":"PuppetTestSystem","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[134001,119219,22601,23800,22336,22203],"name":"PuppetTestSystem","nameLocation":"1350:16:198","scope":134251,"usedErrors":[119173],"usedEvents":[133970]},{"id":134250,"nodeType":"ContractDefinition","src":"1671:1949:198","nodes":[{"id":134009,"nodeType":"UsingForDirective","src":"1722:45:198","nodes":[],"global":false,"libraryName":{"id":134006,"name":"WorldResourceIdInstance","nameLocations":["1728:23:198"],"nodeType":"IdentifierPath","referencedDeclaration":24272,"src":"1728:23:198"},"typeName":{"id":134008,"nodeType":"UserDefinedTypeName","pathNode":{"id":134007,"name":"ResourceId","nameLocations":["1756:10:198"],"nodeType":"IdentifierPath","referencedDeclaration":2782,"src":"1756:10:198"},"referencedDeclaration":2782,"src":"1756:10:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}},{"id":134013,"nodeType":"EventDefinition","src":"1771:24:198","nodes":[],"anonymous":false,"eventSelector":"e762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d","name":"Hello","nameLocation":"1777:5:198","parameters":{"id":134012,"nodeType":"ParameterList","parameters":[{"constant":false,"id":134011,"indexed":false,"mutability":"mutable","name":"msg","nameLocation":"1790:3:198","nodeType":"VariableDeclaration","scope":134013,"src":"1783:10:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134010,"name":"string","nodeType":"ElementaryTypeName","src":"1783:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1782:12:198"}},{"id":134016,"nodeType":"VariableDeclaration","src":"1799:24:198","nodes":[],"constant":false,"mutability":"mutable","name":"world","nameLocation":"1818:5:198","scope":134250,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"},"typeName":{"id":134015,"nodeType":"UserDefinedTypeName","pathNode":{"id":134014,"name":"IBaseWorld","nameLocations":["1799:10:198"],"nodeType":"IdentifierPath","referencedDeclaration":24400,"src":"1799:10:198"},"referencedDeclaration":24400,"src":"1799:10:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"visibility":"private"},{"id":134025,"nodeType":"VariableDeclaration","src":"1827:132:198","nodes":[],"constant":false,"mutability":"mutable","name":"systemId","nameLocation":"1846:8:198","scope":134250,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"},"typeName":{"id":134018,"nodeType":"UserDefinedTypeName","pathNode":{"id":134017,"name":"ResourceId","nameLocations":["1827:10:198"],"nodeType":"IdentifierPath","referencedDeclaration":2782,"src":"1827:10:198"},"referencedDeclaration":2782,"src":"1827:10:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},"value":{"arguments":[{"id":134021,"name":"RESOURCE_SYSTEM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"1897:15:198","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},{"hexValue":"6e616d657370616365","id":134022,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1925:11:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_300f800aee223ec4f0f7f13ec0e9fb1b8a8186bbfdb275780ce6218872155189","typeString":"literal_string \"namespace\""},"value":"namespace"},{"hexValue":"7465737453797374656d","id":134023,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1944:12:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_8d96422d2b097e05a277285f0fc83c2e15de737c7943b8faa9a1568e10dd25b0","typeString":"literal_string \"testSystem\""},"value":"testSystem"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes2","typeString":"bytes2"},{"typeIdentifier":"t_stringliteral_300f800aee223ec4f0f7f13ec0e9fb1b8a8186bbfdb275780ce6218872155189","typeString":"literal_string \"namespace\""},{"typeIdentifier":"t_stringliteral_8d96422d2b097e05a277285f0fc83c2e15de737c7943b8faa9a1568e10dd25b0","typeString":"literal_string \"testSystem\""}],"expression":{"id":134019,"name":"WorldResourceIdLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24145,"src":"1861:18:198","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WorldResourceIdLib_$24145_$","typeString":"type(library WorldResourceIdLib)"}},"id":134020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1880:6:198","memberName":"encode","nodeType":"MemberAccess","referencedDeclaration":24073,"src":"1861:25:198","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes2_$_t_bytes14_$_t_bytes16_$returns$_t_userDefinedValueType$_ResourceId_$2782_$","typeString":"function (bytes2,bytes14,bytes16) pure returns (ResourceId)"}},"id":134024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":["1889:6:198","1914:9:198","1938:4:198"],"names":["typeId","namespace","name"],"nodeType":"FunctionCall","src":"1861:98:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},"visibility":"private"},{"id":134028,"nodeType":"VariableDeclaration","src":"1963:31:198","nodes":[],"constant":false,"mutability":"mutable","name":"puppet","nameLocation":"1988:6:198","scope":134250,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"},"typeName":{"id":134027,"nodeType":"UserDefinedTypeName","pathNode":{"id":134026,"name":"PuppetTestSystem","nameLocations":["1963:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134001,"src":"1963:16:198"},"referencedDeclaration":134001,"src":"1963:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"visibility":"private"},{"id":134051,"nodeType":"FunctionDefinition","src":"1999:117:198","nodes":[],"body":{"id":134050,"nodeType":"Block","src":"2023:93:198","nodes":[],"statements":[{"expression":{"id":134041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":134031,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2029:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":134037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2056:9:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_World_$23730_$","typeString":"function () returns (contract World)"},"typeName":{"id":134036,"nodeType":"UserDefinedTypeName","pathNode":{"id":134035,"name":"World","nameLocations":["2060:5:198"],"nodeType":"IdentifierPath","referencedDeclaration":23730,"src":"2060:5:198"},"referencedDeclaration":23730,"src":"2060:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_World_$23730","typeString":"contract World"}}},"id":134038,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2056:11:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_World_$23730","typeString":"contract World"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_World_$23730","typeString":"contract World"}],"id":134034,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2048:7:198","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":134033,"name":"address","nodeType":"ElementaryTypeName","src":"2048:7:198","typeDescriptions":{}}},"id":134039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2048:20:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":134032,"name":"IBaseWorld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24400,"src":"2037:10:198","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBaseWorld_$24400_$","typeString":"type(contract IBaseWorld)"}},"id":134040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2037:32:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"src":"2029:40:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134042,"nodeType":"ExpressionStatement","src":"2029:40:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":134046,"name":"createCoreModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46913,"src":"2092:16:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_contract$_CoreModule_$35431_$","typeString":"function () returns (contract CoreModule)"}},"id":134047,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2092:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CoreModule_$35431","typeString":"contract CoreModule"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CoreModule_$35431","typeString":"contract CoreModule"}],"expression":{"id":134043,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2075:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2081:10:198","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":22506,"src":"2075:16:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IModule_$22254_$returns$__$","typeString":"function (contract IModule) external"}},"id":134048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2075:36:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134049,"nodeType":"ExpressionStatement","src":"2075:36:198"}]},"functionSelector":"0a9254e4","implemented":true,"kind":"function","modifiers":[],"name":"setUp","nameLocation":"2008:5:198","parameters":{"id":134029,"nodeType":"ParameterList","parameters":[],"src":"2013:2:198"},"returnParameters":{"id":134030,"nodeType":"ParameterList","parameters":[],"src":"2023:0:198"},"scope":134250,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134101,"nodeType":"FunctionDefinition","src":"2120:390:198","nodes":[],"body":{"id":134100,"nodeType":"Block","src":"2153:357:198","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":134059,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2179:16:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_PuppetModule_$119414_$","typeString":"function () returns (contract PuppetModule)"},"typeName":{"id":134058,"nodeType":"UserDefinedTypeName","pathNode":{"id":134057,"name":"PuppetModule","nameLocations":["2183:12:198"],"nodeType":"IdentifierPath","referencedDeclaration":119414,"src":"2183:12:198"},"referencedDeclaration":119414,"src":"2183:12:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"}}},"id":134060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2179:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"}},{"arguments":[{"hexValue":"30","id":134063,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2209:1:198","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":134062,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2199:9:198","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":134061,"name":"bytes","nodeType":"ElementaryTypeName","src":"2203:5:198","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":134064,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2199:12:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":134054,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2159:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2165:13:198","memberName":"installModule","nodeType":"MemberAccess","referencedDeclaration":24444,"src":"2159:19:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IModule_$22254_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IModule,bytes memory) external"}},"id":134065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:53:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134066,"nodeType":"ExpressionStatement","src":"2159:53:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":134070,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134025,"src":"2286:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},"id":134071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2295:14:198","memberName":"getNamespaceId","nodeType":"MemberAccess","referencedDeclaration":24191,"src":"2286:23:198","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ResourceId_$2782_$returns$_t_userDefinedValueType$_ResourceId_$2782_$attached_to$_t_userDefinedValueType$_ResourceId_$2782_$","typeString":"function (ResourceId) pure returns (ResourceId)"}},"id":134072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2286:25:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}],"expression":{"id":134067,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2262:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134069,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2268:17:198","memberName":"registerNamespace","nodeType":"MemberAccess","referencedDeclaration":24460,"src":"2262:23:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_userDefinedValueType$_ResourceId_$2782_$returns$__$","typeString":"function (ResourceId) external"}},"id":134073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2262:50:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134074,"nodeType":"ExpressionStatement","src":"2262:50:198"},{"assignments":[134077],"declarations":[{"constant":false,"id":134077,"mutability":"mutable","name":"system","nameLocation":"2335:6:198","nodeType":"VariableDeclaration","scope":134100,"src":"2318:23:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"},"typeName":{"id":134076,"nodeType":"UserDefinedTypeName","pathNode":{"id":134075,"name":"PuppetTestSystem","nameLocations":["2318:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134001,"src":"2318:16:198"},"referencedDeclaration":134001,"src":"2318:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"visibility":"internal"}],"id":134082,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":134080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2344:20:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_PuppetTestSystem_$134001_$","typeString":"function () returns (contract PuppetTestSystem)"},"typeName":{"id":134079,"nodeType":"UserDefinedTypeName","pathNode":{"id":134078,"name":"PuppetTestSystem","nameLocations":["2348:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134001,"src":"2348:16:198"},"referencedDeclaration":134001,"src":"2348:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}}},"id":134081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2344:22:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"nodeType":"VariableDeclarationStatement","src":"2318:48:198"},{"expression":{"arguments":[{"id":134086,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134025,"src":"2393:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},{"id":134087,"name":"system","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134077,"src":"2403:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},{"hexValue":"74727565","id":134088,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2411:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"},{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":134083,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2372:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2378:14:198","memberName":"registerSystem","nodeType":"MemberAccess","referencedDeclaration":24491,"src":"2372:20:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_userDefinedValueType$_ResourceId_$2782_$_t_contract$_WorldContextConsumer_$23800_$_t_bool_$returns$__$","typeString":"function (ResourceId,contract WorldContextConsumer,bool) external"}},"id":134089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2372:44:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134090,"nodeType":"ExpressionStatement","src":"2372:44:198"},{"expression":{"id":134098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":134091,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134028,"src":"2449:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":134094,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2488:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},{"id":134095,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134025,"src":"2495:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"},{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}],"id":134093,"name":"createPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119572,"src":"2475:12:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBaseWorld_$24400_$_t_userDefinedValueType$_ResourceId_$2782_$returns$_t_address_$","typeString":"function (contract IBaseWorld,ResourceId) returns (address)"}},"id":134096,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2475:29:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":134092,"name":"PuppetTestSystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134001,"src":"2458:16:198","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PuppetTestSystem_$134001_$","typeString":"type(contract PuppetTestSystem)"}},"id":134097,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2458:47:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"src":"2449:56:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"id":134099,"nodeType":"ExpressionStatement","src":"2449:56:198"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setupPuppet","nameLocation":"2129:12:198","parameters":{"id":134052,"nodeType":"ParameterList","parameters":[],"src":"2141:2:198"},"returnParameters":{"id":134053,"nodeType":"ParameterList","parameters":[],"src":"2153:0:198"},"scope":134250,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":134151,"nodeType":"FunctionDefinition","src":"2514:384:198","nodes":[],"body":{"id":134150,"nodeType":"Block","src":"2551:347:198","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":134109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2581:16:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_PuppetModule_$119414_$","typeString":"function () returns (contract PuppetModule)"},"typeName":{"id":134108,"nodeType":"UserDefinedTypeName","pathNode":{"id":134107,"name":"PuppetModule","nameLocations":["2585:12:198"],"nodeType":"IdentifierPath","referencedDeclaration":119414,"src":"2585:12:198"},"referencedDeclaration":119414,"src":"2585:12:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"}}},"id":134110,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2581:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"}},{"arguments":[{"hexValue":"30","id":134113,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2611:1:198","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":134112,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2601:9:198","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":134111,"name":"bytes","nodeType":"ElementaryTypeName","src":"2605:5:198","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":134114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2601:12:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":134104,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2557:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2563:17:198","memberName":"installRootModule","nodeType":"MemberAccess","referencedDeclaration":22448,"src":"2557:23:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IModule_$22254_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IModule,bytes memory) external"}},"id":134115,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2557:57:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134116,"nodeType":"ExpressionStatement","src":"2557:57:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":134120,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134025,"src":"2674:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},"id":134121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2683:14:198","memberName":"getNamespaceId","nodeType":"MemberAccess","referencedDeclaration":24191,"src":"2674:23:198","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ResourceId_$2782_$returns$_t_userDefinedValueType$_ResourceId_$2782_$attached_to$_t_userDefinedValueType$_ResourceId_$2782_$","typeString":"function (ResourceId) pure returns (ResourceId)"}},"id":134122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2674:25:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}],"expression":{"id":134117,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2650:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2656:17:198","memberName":"registerNamespace","nodeType":"MemberAccess","referencedDeclaration":24460,"src":"2650:23:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_userDefinedValueType$_ResourceId_$2782_$returns$__$","typeString":"function (ResourceId) external"}},"id":134123,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2650:50:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134124,"nodeType":"ExpressionStatement","src":"2650:50:198"},{"assignments":[134127],"declarations":[{"constant":false,"id":134127,"mutability":"mutable","name":"system","nameLocation":"2723:6:198","nodeType":"VariableDeclaration","scope":134150,"src":"2706:23:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"},"typeName":{"id":134126,"nodeType":"UserDefinedTypeName","pathNode":{"id":134125,"name":"PuppetTestSystem","nameLocations":["2706:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134001,"src":"2706:16:198"},"referencedDeclaration":134001,"src":"2706:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"visibility":"internal"}],"id":134132,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":134130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2732:20:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_PuppetTestSystem_$134001_$","typeString":"function () returns (contract PuppetTestSystem)"},"typeName":{"id":134129,"nodeType":"UserDefinedTypeName","pathNode":{"id":134128,"name":"PuppetTestSystem","nameLocations":["2736:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134001,"src":"2736:16:198"},"referencedDeclaration":134001,"src":"2736:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}}},"id":134131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2732:22:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"nodeType":"VariableDeclarationStatement","src":"2706:48:198"},{"expression":{"arguments":[{"id":134136,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134025,"src":"2781:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},{"id":134137,"name":"system","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134127,"src":"2791:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},{"hexValue":"74727565","id":134138,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2799:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"},{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":134133,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2760:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134135,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2766:14:198","memberName":"registerSystem","nodeType":"MemberAccess","referencedDeclaration":24491,"src":"2760:20:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_userDefinedValueType$_ResourceId_$2782_$_t_contract$_WorldContextConsumer_$23800_$_t_bool_$returns$__$","typeString":"function (ResourceId,contract WorldContextConsumer,bool) external"}},"id":134139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2760:44:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134140,"nodeType":"ExpressionStatement","src":"2760:44:198"},{"expression":{"id":134148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":134141,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134028,"src":"2837:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":134144,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134016,"src":"2876:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},{"id":134145,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134025,"src":"2883:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"},{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}],"id":134143,"name":"createPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119572,"src":"2863:12:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBaseWorld_$24400_$_t_userDefinedValueType$_ResourceId_$2782_$returns$_t_address_$","typeString":"function (contract IBaseWorld,ResourceId) returns (address)"}},"id":134146,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2863:29:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":134142,"name":"PuppetTestSystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134001,"src":"2846:16:198","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PuppetTestSystem_$134001_$","typeString":"type(contract PuppetTestSystem)"}},"id":134147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2846:47:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"src":"2837:56:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"id":134149,"nodeType":"ExpressionStatement","src":"2837:56:198"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setupRootPuppet","nameLocation":"2523:16:198","parameters":{"id":134102,"nodeType":"ParameterList","parameters":[],"src":"2539:2:198"},"returnParameters":{"id":134103,"nodeType":"ParameterList","parameters":[],"src":"2551:0:198"},"scope":134250,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":134183,"nodeType":"FunctionDefinition","src":"2902:234:198","nodes":[],"body":{"id":134182,"nodeType":"Block","src":"2937:199:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134154,"name":"_setupPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134101,"src":"2943:12:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":134155,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2943:14:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134156,"nodeType":"ExpressionStatement","src":"2943:14:198"},{"expression":{"arguments":[{"hexValue":"74727565","id":134160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2978:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134161,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2984:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134162,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2990:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134163,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2996:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":134157,"name":"vm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49264,"src":"2964:2:198","typeDescriptions":{"typeIdentifier":"t_contract$_Vm_$60339","typeString":"contract Vm"}},"id":134159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2967:10:198","memberName":"expectEmit","nodeType":"MemberAccess","referencedDeclaration":60020,"src":"2964:13:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$returns$__$","typeString":"function (bool,bool,bool,bool) external"}},"id":134164,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2964:37:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134165,"nodeType":"ExpressionStatement","src":"2964:37:198"},{"eventCall":{"arguments":[{"hexValue":"68656c6c6f20776f726c64","id":134167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3018:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"id":134166,"name":"Hello","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134013,"src":"3012:5:198","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":134168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3012:20:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134169,"nodeType":"EmitStatement","src":"3007:25:198"},{"assignments":[134171],"declarations":[{"constant":false,"id":134171,"mutability":"mutable","name":"result","nameLocation":"3052:6:198","nodeType":"VariableDeclaration","scope":134182,"src":"3038:20:198","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134170,"name":"string","nodeType":"ElementaryTypeName","src":"3038:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":134176,"initialValue":{"arguments":[{"hexValue":"68656c6c6f20776f726c64","id":134174,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3080:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"expression":{"id":134172,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134028,"src":"3061:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"id":134173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3068:11:198","memberName":"echoAndEmit","nodeType":"MemberAccess","referencedDeclaration":133991,"src":"3061:18:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$returns$_t_string_memory_ptr_$","typeString":"function (string memory) external returns (string memory)"}},"id":134175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3061:33:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"3038:56:198"},{"expression":{"arguments":[{"id":134178,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134171,"src":"3109:6:198","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"68656c6c6f20776f726c64","id":134179,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3117:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"id":134177,"name":"assertEq","nodeType":"Identifier","overloadedDeclarations":[49399,49424,49437,49453,49495,49537,49579,49616,49653,49690,47234,47259,47289,47314,47373,47398,47428,47453,48926,48961],"referencedDeclaration":48926,"src":"3100:8:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":134180,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3100:31:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134181,"nodeType":"ExpressionStatement","src":"3100:31:198"}]},"functionSelector":"f60736ce","implemented":true,"kind":"function","modifiers":[],"name":"testEmitOnPuppet","nameLocation":"2911:16:198","parameters":{"id":134152,"nodeType":"ParameterList","parameters":[],"src":"2927:2:198"},"returnParameters":{"id":134153,"nodeType":"ParameterList","parameters":[],"src":"2937:0:198"},"scope":134250,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134200,"nodeType":"FunctionDefinition","src":"3140:107:198","nodes":[],"body":{"id":134199,"nodeType":"Block","src":"3172:75:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134186,"name":"_setupPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134101,"src":"3178:12:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":134187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3178:14:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134188,"nodeType":"ExpressionStatement","src":"3178:14:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":134190,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134028,"src":"3208:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"id":134191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3215:9:198","memberName":"msgSender","nodeType":"MemberAccess","referencedDeclaration":134000,"src":"3208:16:198","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":134192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3208:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":134195,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3236:4:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModuleTest_$134250","typeString":"contract PuppetModuleTest"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PuppetModuleTest_$134250","typeString":"contract PuppetModuleTest"}],"id":134194,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3228:7:198","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":134193,"name":"address","nodeType":"ElementaryTypeName","src":"3228:7:198","typeDescriptions":{}}},"id":134196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3228:13:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":134189,"name":"assertEq","nodeType":"Identifier","overloadedDeclarations":[49399,49424,49437,49453,49495,49537,49579,49616,49653,49690,47234,47259,47289,47314,47373,47398,47428,47453,48926,48961],"referencedDeclaration":47234,"src":"3199:8:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":134197,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3199:43:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134198,"nodeType":"ExpressionStatement","src":"3199:43:198"}]},"functionSelector":"d81bebb9","implemented":true,"kind":"function","modifiers":[],"name":"testMsgSender","nameLocation":"3149:13:198","parameters":{"id":134184,"nodeType":"ParameterList","parameters":[],"src":"3162:2:198"},"returnParameters":{"id":134185,"nodeType":"ParameterList","parameters":[],"src":"3172:0:198"},"scope":134250,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134232,"nodeType":"FunctionDefinition","src":"3251:242:198","nodes":[],"body":{"id":134231,"nodeType":"Block","src":"3290:203:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134203,"name":"_setupRootPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134151,"src":"3296:16:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":134204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3296:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134205,"nodeType":"ExpressionStatement","src":"3296:18:198"},{"expression":{"arguments":[{"hexValue":"74727565","id":134209,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3335:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3341:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3347:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134212,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3353:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":134206,"name":"vm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49264,"src":"3321:2:198","typeDescriptions":{"typeIdentifier":"t_contract$_Vm_$60339","typeString":"contract Vm"}},"id":134208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3324:10:198","memberName":"expectEmit","nodeType":"MemberAccess","referencedDeclaration":60020,"src":"3321:13:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$returns$__$","typeString":"function (bool,bool,bool,bool) external"}},"id":134213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3321:37:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134214,"nodeType":"ExpressionStatement","src":"3321:37:198"},{"eventCall":{"arguments":[{"hexValue":"68656c6c6f20776f726c64","id":134216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3375:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"id":134215,"name":"Hello","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134013,"src":"3369:5:198","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":134217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3369:20:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134218,"nodeType":"EmitStatement","src":"3364:25:198"},{"assignments":[134220],"declarations":[{"constant":false,"id":134220,"mutability":"mutable","name":"result","nameLocation":"3409:6:198","nodeType":"VariableDeclaration","scope":134231,"src":"3395:20:198","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134219,"name":"string","nodeType":"ElementaryTypeName","src":"3395:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":134225,"initialValue":{"arguments":[{"hexValue":"68656c6c6f20776f726c64","id":134223,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3437:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"expression":{"id":134221,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134028,"src":"3418:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"id":134222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3425:11:198","memberName":"echoAndEmit","nodeType":"MemberAccess","referencedDeclaration":133991,"src":"3418:18:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$returns$_t_string_memory_ptr_$","typeString":"function (string memory) external returns (string memory)"}},"id":134224,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3418:33:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"3395:56:198"},{"expression":{"arguments":[{"id":134227,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134220,"src":"3466:6:198","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"68656c6c6f20776f726c64","id":134228,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3474:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"id":134226,"name":"assertEq","nodeType":"Identifier","overloadedDeclarations":[49399,49424,49437,49453,49495,49537,49579,49616,49653,49690,47234,47259,47289,47314,47373,47398,47428,47453,48926,48961],"referencedDeclaration":48926,"src":"3457:8:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":134229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3457:31:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134230,"nodeType":"ExpressionStatement","src":"3457:31:198"}]},"functionSelector":"3ae50144","implemented":true,"kind":"function","modifiers":[],"name":"testEmitOnRootPuppet","nameLocation":"3260:20:198","parameters":{"id":134201,"nodeType":"ParameterList","parameters":[],"src":"3280:2:198"},"returnParameters":{"id":134202,"nodeType":"ParameterList","parameters":[],"src":"3290:0:198"},"scope":134250,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134249,"nodeType":"FunctionDefinition","src":"3497:121:198","nodes":[],"body":{"id":134248,"nodeType":"Block","src":"3539:79:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134235,"name":"_setupRootPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134151,"src":"3545:16:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":134236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3545:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134237,"nodeType":"ExpressionStatement","src":"3545:18:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":134239,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134028,"src":"3579:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134001","typeString":"contract PuppetTestSystem"}},"id":134240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3586:9:198","memberName":"msgSender","nodeType":"MemberAccess","referencedDeclaration":134000,"src":"3579:16:198","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":134241,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3579:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":134244,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3607:4:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModuleTest_$134250","typeString":"contract PuppetModuleTest"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PuppetModuleTest_$134250","typeString":"contract PuppetModuleTest"}],"id":134243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3599:7:198","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":134242,"name":"address","nodeType":"ElementaryTypeName","src":"3599:7:198","typeDescriptions":{}}},"id":134245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3599:13:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":134238,"name":"assertEq","nodeType":"Identifier","overloadedDeclarations":[49399,49424,49437,49453,49495,49537,49579,49616,49653,49690,47234,47259,47289,47314,47373,47398,47428,47453,48926,48961],"referencedDeclaration":47234,"src":"3570:8:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":134246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3570:43:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134247,"nodeType":"ExpressionStatement","src":"3570:43:198"}]},"functionSelector":"06e28a34","implemented":true,"kind":"function","modifiers":[],"name":"testMsgSenderRootPuppet","nameLocation":"3506:23:198","parameters":{"id":134233,"nodeType":"ParameterList","parameters":[],"src":"3529:2:198"},"returnParameters":{"id":134234,"nodeType":"ParameterList","parameters":[],"src":"3539:0:198"},"scope":134250,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":134002,"name":"Test","nameLocations":["1700:4:198"],"nodeType":"IdentifierPath","referencedDeclaration":58812,"src":"1700:4:198"},"id":134003,"nodeType":"InheritanceSpecifier","src":"1700:4:198"},{"baseName":{"id":134004,"name":"GasReporter","nameLocations":["1706:11:198"],"nodeType":"IdentifierPath","referencedDeclaration":226,"src":"1706:11:198"},"id":134005,"nodeType":"InheritanceSpecifier","src":"1706:11:198"}],"canonicalName":"PuppetModuleTest","contractDependencies":[23730,35431,35451,35650,35830,36019,119414,134001],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[134250,226,58812,49271,49268,58761,54499,54209,53445,51391,50698,49205],"name":"PuppetModuleTest","nameLocation":"1680:16:198","scope":134251,"usedErrors":[],"usedEvents":[46919,46923,46927,46931,46935,46939,46943,46947,46953,46959,46967,46975,46981,46987,46993,46999,49293,49298,49303,49310,49317,49324,134013]}],"license":"MIT"},"id":198}
1
+ {"abi":[{"type":"function","name":"IS_TEST","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"excludeArtifacts","inputs":[],"outputs":[{"name":"excludedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"excludeContracts","inputs":[],"outputs":[{"name":"excludedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"excludeSenders","inputs":[],"outputs":[{"name":"excludedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"failed","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"setUp","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"targetArtifactSelectors","inputs":[],"outputs":[{"name":"targetedArtifactSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetArtifacts","inputs":[],"outputs":[{"name":"targetedArtifacts_","type":"string[]","internalType":"string[]"}],"stateMutability":"view"},{"type":"function","name":"targetContracts","inputs":[],"outputs":[{"name":"targetedContracts_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"targetSelectors","inputs":[],"outputs":[{"name":"targetedSelectors_","type":"tuple[]","internalType":"struct StdInvariant.FuzzSelector[]","components":[{"name":"addr","type":"address","internalType":"address"},{"name":"selectors","type":"bytes4[]","internalType":"bytes4[]"}]}],"stateMutability":"view"},{"type":"function","name":"targetSenders","inputs":[],"outputs":[{"name":"targetedSenders_","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"testEmitOnPuppet","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testEmitOnRootPuppet","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testMsgSender","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"testMsgSenderRootPuppet","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Hello","inputs":[{"name":"msg","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_address","inputs":[{"name":"","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_array","inputs":[{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_bytes","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_bytes32","inputs":[{"name":"","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_int","inputs":[{"name":"","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_address","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256[]","indexed":false,"internalType":"uint256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256[]","indexed":false,"internalType":"int256[]"}],"anonymous":false},{"type":"event","name":"log_named_array","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"address[]","indexed":false,"internalType":"address[]"}],"anonymous":false},{"type":"event","name":"log_named_bytes","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false},{"type":"event","name":"log_named_bytes32","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"log_named_decimal_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_decimal_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"decimals","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_named_int","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"int256","indexed":false,"internalType":"int256"}],"anonymous":false},{"type":"event","name":"log_named_string","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_named_uint","inputs":[{"name":"key","type":"string","indexed":false,"internalType":"string"},{"name":"val","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"log_string","inputs":[{"name":"","type":"string","indexed":false,"internalType":"string"}],"anonymous":false},{"type":"event","name":"log_uint","inputs":[{"name":"","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"logs","inputs":[{"name":"","type":"bytes","indexed":false,"internalType":"bytes"}],"anonymous":false}],"bytecode":{"object":"0x608060405260008054600160ff1991821681179092556004805490911690911790555a601c5561004e61737960f01b686e616d65737061636560b81b697465737453797374656d60b01b610063565b60205534801561005d57600080fd5b506100cd565b6000610071607060106100a6565b6001600160f01b03198516600160801b600160f01b03601086901c16176001600160801b0319841690911c1790509392505050565b808201808211156100c757634e487b7160e01b600052601160045260246000fd5b92915050565b6201b75b80620000de6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c806385226c8111610097578063d81bebb911610066578063d81bebb914610194578063e20c9f711461019c578063f60736ce146101a4578063fa7626d4146101ac57600080fd5b806385226c8114610157578063916a17c61461016c578063b5508aa914610174578063ba414fa61461017c57600080fd5b80633ae50144116100d35780633ae501441461012a5780633e5e3c23146101325780633f7286f41461013a57806366d9a9a01461014257600080fd5b806306e28a34146100fa5780630a9254e4146101045780631ed7831c1461010c575b600080fd5b6101026101b9565b005b610102610251565b610114610331565b604051610121919061164b565b60405180910390f35b610102610393565b610114610593565b6101146105f3565b61014a610653565b6040516101219190611698565b61015f610757565b60405161012191906117b3565b61014a610827565b61015f610922565b6101846109f2565b6040519015158152602001610121565b610102610b34565b610114610b3c565b610102610b9c565b6000546101849060ff1681565b6101c1610ba4565b602154604080517fd737d0c7000000000000000000000000000000000000000000000000000000008152905161024f926001600160a01b03169163d737d0c79160048083019260209291908290030181865afa158015610225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610249919061182a565b30610e1a565b565b60405161025d906115db565b604051809103906000f080158015610279573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216918217905563c4d66de86102be610f3a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561031757600080fd5b505af115801561032b573d6000803e3d6000fd5b50505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561038957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161036b575b5050505050905090565b61039b610ba4565b6040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c290608401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050507fe762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d60405161048d906020808252600b908201527f68656c6c6f20776f726c64000000000000000000000000000000000000000000604082015260600190565b60405180910390a16021546040517f319585fb00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f68656c6c6f20776f726c6400000000000000000000000000000000000000000060448201526000916001600160a01b03169063319585fb906064016000604051808303816000875af1158015610527573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261054f91908101906118f1565b9050610590816040518060400160405280600b81526020017f68656c6c6f20776f726c64000000000000000000000000000000000000000000815250611036565b50565b6060600f805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b6060600e805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b60606012805480602002602001604051908101604052809291908181526020016000905b8282101561074e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561073657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116106e35790505b50505050508152505081526020019060010190610677565b50505050905090565b60606011805480602002602001604051908101604052809291908181526020016000905b8282101561074e57838290600052602060002001805461079a90611942565b80601f01602080910402602001604051908101604052809291908181526020018280546107c690611942565b80156108135780601f106107e857610100808354040283529160200191610813565b820191906000526020600020905b8154815290600101906020018083116107f657829003601f168201915b50505050508152602001906001019061077b565b60606013805480602002602001604051908101604052809291908181526020016000905b8282101561074e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561090a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116108b75790505b5050505050815250508152602001906001019061084b565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101561074e57838290600052602060002001805461096590611942565b80601f016020809104026020016040519081016040528092919081815260200182805461099190611942565b80156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050505081526020019060010190610946565b60008054610100900460ff1615610a125750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b2f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610ab7917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611995565b60408051601f1981840301815290829052610ad1916119dd565b6000604051808303816000865af19150503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5091505080806020019051810190610b2b91906119f9565b9150505b919050565b6101c161117c565b6060600c805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b61039b61117c565b601f546040516001600160a01b039091169063af068c9e90610bc5906115e9565b604051809103906000f080158015610be1573d6000803e3d6000fd5b50604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16909152610c2a919060248101611a1b565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b5050601f546020546001600160a01b03909116925063b29e40899150610cbd907dffffffffffffffffffffffffffff00000000000000000000000000000000167f6e730000000000000000000000000000000000000000000000000000000000001790565b6040518263ffffffff1660e01b8152600401610cdb91815260200190565b600060405180830381600087803b158015610cf557600080fd5b505af1158015610d09573d6000803e3d6000fd5b505050506000604051610d1b906115f7565b604051809103906000f080158015610d37573d6000803e3d6000fd5b50601f546020546040517f3350b6a900000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03808416602483015260016044830152929350911690633350b6a990606401600060405180830381600087803b158015610dac57600080fd5b505af1158015610dc0573d6000803e3d6000fd5b5050601f54602054610ddf93506001600160a01b03909116915061119d565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b806001600160a01b0316826001600160a01b031614610f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610eb89060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051610eef9190611a3d565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051610f269190611a91565b60405180910390a1610f3661149b565b5050565b6000604051610f4890611605565b604051809103906000f080158015610f64573d6000803e3d6000fd5b50604051610f7190611613565b604051809103906000f080158015610f8d573d6000803e3d6000fd5b50604051610f9a90611621565b604051809103906000f080158015610fb6573d6000803e3d6000fd5b50604051610fc39061162f565b604051809103906000f080158015610fdf573d6000803e3d6000fd5b50604051610fec9061163d565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015611030573d6000803e3d6000fd5b50905090565b8060405160200161104791906119dd565b604051602081830303815290604052805190602001208260405160200161106e91906119dd565b6040516020818303038152906040528051906020012014610f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405161110e9060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583826040516111459190611ace565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051610f269190611b1d565b601f546040516001600160a01b0390911690638da798da90610bc5906115e9565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526000916001600160a01b03851691633ae7af08910160405160208183030381529060405261124090611b5a565b6040516024810186905260440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb9eb8bfb00000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526112dd929190600401611b9c565b6000604051808303816000875af11580156112fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261132491908101906118f1565b806020019051810190611337919061182a565b90506001600160a01b03831663bfdfaff77f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff00000000000000000000000000000000851617604080517f737900000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201520160405160208183030381529060405261141a90611b5a565b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1690915261146392919060248101611bb5565b600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050505092915050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115ad5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f198184030181529082905261154c9291602001611995565b60408051601f1981840301815290829052611566916119dd565b6000604051808303816000865af19150503d80600081146115a3576040519150601f19603f3d011682016040523d82523d6000602084013e6115a8565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61553a8062001bde83390190565b615a5d806200711883390190565b610a97806200cb7583390190565b611a79806200d60c83390190565b6118cc806200f08583390190565b610b15806201095183390190565b61567c806201146683390190565b614c6d8062016ae283390190565b6020808252825182820181905260009190848201906040850190845b8181101561168c5783516001600160a01b031683529284019291840191600101611667565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561175457898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b8083101561173f5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b01906116fd565b50978a019795505050918701916001016116c0565b50919998505050505050505050565b60005b8381101561177e578181015183820152602001611766565b50506000910152565b6000815180845261179f816020860160208601611763565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180857603f198886030184526117f6858351611787565b945092850192908501906001016117da565b5092979650505050505050565b6001600160a01b038116811461059057600080fd5b60006020828403121561183c57600080fd5b815161184781611815565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156118985761189861184e565b604051601f8501601f19908116603f011681019082821181831017156118c0576118c061184e565b816040528093508581528686860111156118d957600080fd5b6118e7866020830187611763565b5050509392505050565b60006020828403121561190357600080fd5b815167ffffffffffffffff81111561191a57600080fd5b8201601f8101841361192b57600080fd5b61193a8482516020840161187d565b949350505050565b600181811c9082168061195657607f821691505b60208210810361198f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516119cf816004850160208701611763565b919091016004019392505050565b600082516119ef818460208701611763565b9190910192915050565b600060208284031215611a0b57600080fd5b8151801515811461184757600080fd5b6001600160a01b038316815260406020820152600061193a6040830184611787565b604081526000611a7a60408301600a81527f2020202020204c65667400000000000000000000000000000000000000000000602082015260400190565b90506001600160a01b038316602083015292915050565b604081526000611a7a60408301600a81527f2020202020526967687400000000000000000000000000000000000000000000602082015260400190565b604081526000611b0b60408301600a81527f2020202020204c65667400000000000000000000000000000000000000000000602082015260400190565b828103602084015261193a8185611787565b604081526000611b0b60408301600a81527f2020202020526967687400000000000000000000000000000000000000000000602082015260400190565b8051602080830151919081101561198f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b82815260406020820152600061193a6040830184611787565b838152826020820152606060408201526000611bd46060830184611787565b9594505050505056fe60a060405234801561001057600080fd5b506100477f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e17580546001600160a01b03191630179055565b6040516e0c4b8c0b8c0b5d5b985d591a5d1959608a1b907fc7f5fdc8526b76f54916701bc910876243ffff2a40b0bb8d59eea8151c52c00590600090a2336080526040516e0c4b8c0b8c0b5d5b985d591a5d1959608a1b907f7f8f36afe3fb61c459c1a54a60b8a477eab02cc58e49f547561a40906239cb8290600090a2608051615452620000e86000396000818161036f015261139601526154526000f3fe6080604052600436106101d15760003560e01c80638c364d59116100f7578063c4d66de811610095578063d9c03a0411610064578063d9c03a04146106d1578063dbbf0e21146105d1578063e228a4a3146106f1578063ef6ea8621461071157610266565b8063c4d66de814610651578063cc49db7e14610671578063d03edb8c14610691578063d4285dc2146106b157610266565b8063af068c9e116100d1578063af068c9e146105f1578063b047c1eb14610611578063c0a2895a14610631578063c11222291461054b57610266565b80638c364d59146105915780639f1fcf0a146105b1578063a53417ed146105d157610266565b8063390baae01161016f5780634dc77d971161013e5780634dc77d971461050b578063505a181d1461052b5780636951955d1461054b578063894ecc581461057e57610266565b8063390baae01461047b5780633a77c2c21461049b5780633ae7af08146104c9578063419b58fd146104dc57610266565b8063150f3262116101ab578063150f3262146103fb5780631e7889771461041b578063298314fb1461043b5780633708196e1461045b57610266565b806302d05d3f1461035d57806305242d2f146103ae578063114a7266146103db57610266565b366102665760408051616e7360f01b6020820152600060228201819052603082018190529161021891016040516020818303038152906040526102139061459d565b610731565b60408051616e7360f01b6020820152600060228201819052603082015291925061026491016040516020818303038152906040526102559061459d565b61025f34846145da565b61080f565b005b303303610299576040516327a1460b60e21b81526001600160e01b03196000351660048201526024015b60405180910390fd5b6000806102b16000356001600160e01b031916610901565b91509150816000801b036102ff576040517ffdde54e20000000000000000000000000000000000000000000000000000000081526001600160e01b0319600035166004820152602401610290565b60006103436000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250869150610a119050565b9050600061035333858434610a44565b9050805160208201f35b34801561036957600080fd5b506103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103ba57600080fd5b506103ce6103c936600461464a565b610a71565b6040516103a59190614700565b3480156103e757600080fd5b506102646103f6366004614755565b610ab4565b34801561040757600080fd5b50610264610416366004614755565b610b67565b34801561042757600080fd5b506103ce6104363660046147e2565b610c12565b34801561044757600080fd5b50610264610456366004614840565b610c5c565b34801561046757600080fd5b506102646104763660046148ed565b610d45565b34801561048757600080fd5b506102646104963660046148ed565b610dfb565b3480156104a757600080fd5b506104bb6104b6366004614983565b610ea8565b6040519081526020016103a5565b6103ce6104d7366004614a53565b610eb9565b3480156104e857600080fd5b506104fc6104f7366004614a9a565b610ef5565b6040516103a593929190614aed565b34801561051757600080fd5b506103ce610526366004614b8d565b610f4a565b34801561053757600080fd5b50610264610546366004614bf6565b610f59565b34801561055757600080fd5b507f312e302e302d756e6175646974656400000000000000000000000000000000006104bb565b6103ce61058c366004614c57565b610fce565b34801561059d57600080fd5b506104bb6105ac36600461464a565b61112a565b3480156105bd57600080fd5b506104bb6105cc366004614cb0565b61116d565b3480156105dd57600080fd5b506104bb6105ec366004614d0f565b61117b565b3480156105fd57600080fd5b5061026461060c366004614d66565b611188565b34801561061d57600080fd5b5061026461062c366004614da0565b611204565b34801561063d57600080fd5b5061026461064c366004614e2f565b6112af565b34801561065d57600080fd5b5061026461066c366004614ebc565b61135d565b34801561067d57600080fd5b506104fc61068c366004614bf6565b6114d8565b34801561069d57600080fd5b506103ce6106ac3660046147e2565b61152a565b3480156106bd57600080fd5b506104bb6106cc366004614983565b61156b565b3480156106dd57600080fd5b506102646106ec36600461464a565b611576565b3480156106fd57600080fd5b506104bb61070c366004614983565b6115f6565b34801561071d57600080fd5b5061026461072c366004614755565b611601565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061076a5761076a614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e636573000000000000000000000000000000000000000000000000603083015260009161080791015b6040516020818303038152906040526107df9061459d565b8360007e200100200000000000000000000000000000000000000000000000000000006116ac565b949350505050565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061084557610845614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015281518082039093018352810190526108fc906108b19061459d565b826000856040516020016108c791815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006116d9565b505050565b6040805160018082528183019092526000918291829160208083019080368337019050509050837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061095a5761095a614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f720000000000000000000000000000000060308201528151808203909301835281019052600090819081906109f3906109cd9061459d565b857e240200200400000000000000000000000000000000000000000000000000006116ee565b925092509250610a048383836117f6565b9550955050505050915091565b82820160200180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682179052825b9392505050565b6060600080610a558787878761180e565b9150915081610a6757610a67816119f2565b9695505050505050565b6060610a67868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791506119fa9050565b303303610ae2576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610aec8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611a8b92505050565b505050505050565b303303610b95576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610b9f8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611aa692505050565b6060610c5385858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250611ae1915050565b95945050505050565b303303610c8a576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610c948833611a3f565b610d3b8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250611b1b92505050565b5050505050505050565b303303610d73576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610d7d8733611a3f565b610df28787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250889250611b31915050565b50505050505050565b303303610e29576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610e338733611a3f565b610df28787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152508892506116d9915050565b6000610eb382611b74565b92915050565b6060303303610ee9576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610a3d33848434610a44565b606060006060610f3a878787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506116ee915050565b9250925092509450945094915050565b6060610a678686868686611c44565b303303610f87576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610f918333611a3f565b6108fc83838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611d0592505050565b6060303303610ffe576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b336001600160a01b038516036110215761101a33848434610a44565b9050610a3d565b600061102d8533611d18565b905061103c8186338787611dea565b156110555761104d85858534610a44565b915050610a3d565b6000611062866000611d18565b90506110718187338888611dea565b1561108b5761108286868634610a44565b92505050610a3d565b60006110bd616e7360f01b7dffffffffffffffffffffffffffff00000000000000000000000000000000881617611ebf565b90506110cc8188338989611dea565b156110e7576110dd87878734610a44565b9350505050610a3d565b6040517fc86745f90000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152336024820152604401610290565b6000610a67868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791506116ac9050565b6000610c5385858585611f59565b6000610807848484611fa1565b3033036111b6576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b60408051616e7360f01b602082015260006022820181905260308201526111f691016040516020818303038152906040526111f09061459d565b33611fb7565b6112008282612008565b5050565b303303611232576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b61123c8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061211a92505050565b3033036112dd576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6112e78833611a3f565b610d3b8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528b93508a9250899189908990819084018382808284376000920191909152506123c992505050565b30330361138b576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461142f5760408051616e7360f01b602082015260006022820181905260308201526113fa91016040516020818303038152906040526113f59061459d565b6123e1565b336040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610290929190614eef565b600061147b7f636f7265000000000000000000000000000000000000000000000000000000007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061250f565b6001600160a01b0316146114bb576040517f15e34a4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008152602081019091526114d5908290612008565b50565b60606000606061151b8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061262492505050565b92509250925093509350939050565b6060610c538585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525087925061264a915050565b6000610eb382612660565b3033036115a4576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6115ae8533611a3f565b6115ef858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792508691506126d49050565b5050505050565b6000610eb38261272d565b30330361162f576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6116398633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061275392505050565b6000610c536116bb868661278e565b60ff858116601b0360080285901c166116d485876127e4565b612827565b6115ef85856116e884876127e4565b8561211a565b60606000606060006116ff85612878565b905061170c87878361289b565b93506000611719866128d4565b905080156117eb5761172b8888612911565b935066ffffffffffffff841667ffffffffffffffff81111561174f5761174f61499c565b6040519080825280601f01601f191660200182016040528015611779576020820181803683370190505b5092506020830160005b828160ff1610156117e857600061179b8b8b84612924565b905060006117b8888460ff166028026038011c64ffffffffff1690565b90506117c782600083876129a4565b6117d181856145da565b9350505080806117e090614f1a565b915050611783565b50505b505093509350939050565b60008061180285612a73565b90969095509350505050565b60006060600061181d86612a88565b905060005b81518110156118fa57600082828151811061183f5761183f614ed9565b6020026020010151905061186b6001826affffffffffffffffffffff1916612b5690919063ffffffff16565b156118e7576040517fc3323031000000000000000000000000000000000000000000000000000000008152606082901c9063c3323031906118b4908c908c908c90600401614f39565b600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505050505b50806118f281614f61565b915050611822565b5061190787858888612b74565b909350915060005b81518110156119e757600082828151811061192c5761192c614ed9565b602002602001015190506119586002826affffffffffffffffffffff1916612b5690919063ffffffff16565b156119d4576040517f973d8f99000000000000000000000000000000000000000000000000000000008152606082901c9063973d8f99906119a1908c908c908c90600401614f39565b600060405180830381600087803b1580156119bb57600080fd5b505af11580156119cf573d6000803e3d6000fd5b505050505b50806119df81614f61565b91505061190f565b505094509492505050565b805160208201fd5b6060611a0582612c8f565b8360ff161015611a2257611a1b85858585612ca1565b9050610807565b611a1b8585611a3085612c8f565b611a3a9087614f7b565b611ae1565b611a498282612cce565b61120057611a56826123e1565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610290929190614eef565b611aa084848484611a9b89611b74565b611b31565b50505050565b6000611ab28585612911565b90506000611acf828560ff166028026038011c64ffffffffff1690565b9050610b5f8686868460008888612d11565b6060610807611af1858585612924565b6000611b1685611b018989612911565b9060ff166028026038011c64ffffffffff1690565b613127565b6115ef8585858585611b2c8b611b74565b61314a565b611b3a81612c8f565b8360ff161015611b5657611b5185858585856116d9565b6115ef565b6115ef8585611b6484612c8f565b611b6e9087614f7b565b85612753565b60408051613a3160f11b60208201526473746f726560d81b6022820152655461626c657360d01b603082015260009101604051602081830303815290604052611bbc9061459d565b8203611be857507e60030220202000000000000000000000000000000000000000000000000000919050565b60408051613a3160f11b60208201526473746f726560d81b6022820152655461626c657360d01b6030820152610eb391611c3b9101604051602081830303815290604052611c359061459d565b846134a3565b60206000612827565b60606000611c528787612911565b90506000611c6f828760ff166028026038011c64ffffffffff1690565b90508085101580611c7f57508084115b15611cda578081861015611c9d57611c98600186614f94565b611c9f565b855b6040517f7e8578d300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610290565b6000611ce7898989612924565b9050611cf88187611b168189614f94565b9998505050505050505050565b6112008282611d1385611b74565b6134bf565b60408051600280825260608201835260009283929190602083019080368337019050509050836001600160a01b031660001b81600081518110611d5d57611d5d614ed9565b602002602001018181525050826001600160a01b031660001b81600181518110611d8957611d89614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5573657244656c65676174696f6e436f000000000000000000000000000000006030830152600091610c5391016107c7565b6000611df5866137d2565b15611e0257506001610c53565b85611e0f57506000610c53565b600080611e8b8660008a8a8989604051602401611e2e93929190614f39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1a86b55000000000000000000000000000000000000000000000000000000000179052612b74565b9150915081611e9f57600092505050610c53565b80806020019051810190611eb39190614fa7565b98975050505050505050565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611ef857611ef8614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d65737061636544656c6567617400000000000000000000000000000000603083015260009161080791016107c7565b600080611f6583612c8f565b90508060ff168460ff161015611f8d5760ff848116601b0360080284901c165b915050610807565b611f858686611f9c8488614f7b565b61384d565b6000610807848484611fb288611b74565b611f59565b6001600160a01b038116611ff1616e7360f01b7dffffffffffffffffffffffffffff0000000000000000000000000000000085161761385d565b6001600160a01b03161461120057611a56826123e1565b612032827f780ac2fc00000000000000000000000000000000000000000000000000000000613902565b6120a7336000848460405160240161204a9190614700565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7c5b03350000000000000000000000000000000000000000000000000000000017905261395d565b50611200826001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614fc9565b825160208401208461396e565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff00000000000000000000000000000000000000000000000000000000000016036121a457837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161219793929190615037565b60405180910390a2611aa0565b60006121b0858561278e565b905060006121bd86613aae565b905060005b815181101561229c5760008282815181106121df576121df614ed9565b6020026020010151905061220b6004826affffffffffffffffffffff1916612b5690919063ffffffff16565b15612289576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90612256908b908b908b908b9060040161506a565b600060405180830381600087803b15801561227057600080fd5b505af1158015612284573d6000803e3d6000fd5b505050505b508061229481614f61565b9150506121c2565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8686866040516122d193929190615037565b60405180910390a26122ec828565ffffffffffff1685613b49565b60005b8151811015610df257600082828151811061230c5761230c614ed9565b602002602001015190506123386008826affffffffffffffffffffff1916612b5690919063ffffffff16565b156123b6576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190612383908b908b908b908b9060040161506a565b600060405180830381600087803b15801561239d57600080fd5b505af11580156123b1573d6000803e3d6000fd5b505050505b50806123c181614f61565b9150506122ef565b610b5f8686868686866123dc8d8d612911565b612d11565b606081601081901b60006123f483613b5f565b9050827fffffffffffffffffffffffffffff00000000000000000000000000000000000083161561244f5761244a7fffffffffffffffffffffffffffff0000000000000000000000000000000000008416613b76565b612486565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6fffffffffffffffffffffffffffffffff198316156124ad576124a883613b76565b6124e4565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016124f6939291906150a3565b6040516020818303038152906040529350505050919050565b60408051600280825260608201835260009283929190602083019080368337019050509050836fffffffffffffffffffffffffffffffff19168160008151811061255b5761255b614ed9565b602002602001018181525050828160018151811061257b5761257b614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f496e7374616c6c65644d6f64756c657300000000000000000000000000000000603083015260009161261891015b6040516020818303038152906040526125f09061459d565b8360007e140100140000000000000000000000000000000000000000000000000000006116ac565b60601c95945050505050565b60606000606061263d858561263888611b74565b6116ee565b9250925092509250925092565b606061080784848461265b88611b74565b6119fa565b600061266b82613c06565b905061267682613cbf565b6126cf57818260405160200161268e91815260200190565b60408051601f19818403018152908290527f41e713ad0000000000000000000000000000000000000000000000000000000082526102909291600401615131565b919050565b60006126e08585612911565b905060006126fd828560ff166028026038011c64ffffffffff1690565b9050610b5f8686866127168764ffffffffff8716614f94565b604080516000815260208101909152889088612d11565b600061273882613da1565b9050806126cf57818260405160200161268e91815260200190565b600061275f8585612911565b9050600061277c828560ff166028026038011c64ffffffffff1690565b9050610b5f8686866000858888612d11565b600082826040516020016127a392919061514a565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561281f5761280b60ff601b83900360080287901c16836145da565b91508061281781614f61565b9150506127e9565b509392505050565b60006020821061284d5760208204840193506020828161284957612849615185565b0691505b508254600882021b60208290038084111561281f576001850154600882021c82179150509392505050565b6000600861288860026020614f94565b612892919061519b565b9190911c919050565b6060816000036128ba5750604080516020810190915260008152610a3d565b60006128c6858561278e565b9050610c5381600085613127565b600060086001806128e760026020614f94565b6128f19190614f94565b6128fb9190614f94565b612905919061519b565b8260ff911c1692915050565b6000610a3d6129208484613e5a565b5490565b6000838360405160200161293992919061514a565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b8215612a2d57602083106129ce576020830484019350602083816129ca576129ca615185565b0692505b8215612a2d5760208390036000818410156129f25750600019600884021c196129fd565b50600019600882021c195b8554600886021b811984511682821617845250818411612a1e575050611aa0565b50600194909401939182900391015b5b60208210612a4f5783548152600190930192601f1990910190602001612a2e565b8115611aa0576000600019600884021c198251865482169119161782525050505050565b602081015160408201516000905b9050915091565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612ac257612ac2614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b730000000000000000000000000000000000000000006030830152600091612b3f91015b604051602081830303815290604052612b379061459d565b836000611ae1565b9050610807612b518260008451613eb0565b613f40565b60008160ff1682612b678560581c90565b1660ff1614905092915050565b60006060600080612b8486613f51565b90925090506001600160a01b038216612bd55785612ba1876123e1565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610290929190615131565b80612be457612be48689611a3f565b8615612c30577dffffffffffffffffffffffffffff000000000000000000000000000000008616616e7360f01b176000612c1d82610731565b9050612c2d8261025f8b846145da565b50505b6000612c3c8760101b90565b7fffffffffffffffffffffffffffff0000000000000000000000000000000000001614612c7457612c6f88888488614035565b612c80565b612c80888884886140ad565b90999098509650505050505050565b6000600860016128f160026020614f94565b6060610c53612cb0868661278e565b612cba84866127e4565b60ff868116601b0360080286901c16613127565b6000612d01616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008516178361410e565b80610a3d5750610a3d838361410e565b613a3160f11b877fffff0000000000000000000000000000000000000000000000000000000000001614612d9b57613a3160f11b8788604051602001612d5991815260200190565b60408051601f19818403018152908290527f31b466830000000000000000000000000000000000000000000000000000000082526102909392916004016151b2565b6000612db6828760ff166028026038011c64ffffffffff1690565b9050600083518564ffffffffff1683612dcf9190614f94565b612dd991906145da565b9050808214158015612dfb575081612df186886151f3565b64ffffffffff1614155b15612e4b576040517fa65010b400000000000000000000000000000000000000000000000000000000815264ffffffffff8088166004830152808716602483015283166044820152606401610290565b818664ffffffffff161115612e9c576040517f7e8578d30000000000000000000000000000000000000000000000000000000081526004810183905264ffffffffff87166024820152604401610290565b6000612ea98489846141e0565b90506000612eb68b613aae565b905060005b8151811015612f8b576000828281518110612ed857612ed8614ed9565b60200260200101519050612f046010826affffffffffffffffffffff1916612b5690919063ffffffff16565b15612f7857606081901c6001600160a01b03166355eb5a288e8e8e8e8e8d8f6040518863ffffffff1660e01b8152600401612f459796959493929190615218565b600060405180830381600087803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b505050505b5080612f8381614f61565b915050612ebb565b5064ffffffffff881660005b8a60ff168160ff161015612fca57612fbe878260ff166028026038011c64ffffffffff1690565b90910190600101612f97565b508b7faa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b48c838b878c604051613003959493929190615276565b60405180910390a25082841461302457600061301f8c8c613e5a565b839055505b60006130318c8c8c612924565b9050613045818a64ffffffffff1689613b49565b5060005b815181101561311957600082828151811061306657613066614ed9565b602002602001015190506130926020826affffffffffffffffffffff1916612b5690919063ffffffff16565b1561310657606081901c6001600160a01b031663635845338e8e8e8e8e8a8f6040518863ffffffff1660e01b81526004016130d39796959493929190615218565b600060405180830381600087803b1580156130ed57600080fd5b505af1158015613101573d6000803e3d6000fd5b505050505b508061311181614f61565b915050613049565b505050505050505050505050565b60405160208101601f19603f848401011660405282825261281f858585846129a4565b7f6f74000000000000000000000000000000000000000000000000000000000000867fffff00000000000000000000000000000000000000000000000000000000000016036131d657857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9868686866040516131c994939291906152bc565b60405180910390a2610b5f565b60006131e187613aae565b905060005b81518110156132c457600082828151811061320357613203614ed9565b6020026020010151905061322f6001826affffffffffffffffffffff1916612b5690919063ffffffff16565b156132b1576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c9061327e908c908c908c908c908c908c906004016152fb565b600060405180830381600087803b15801561329857600080fd5b505af11580156132ac573d6000803e3d6000fd5b505050505b50806132bc81614f61565b9150506131e6565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9878787876040516132fb94939291906152bc565b60405180910390a2600061330f888861278e565b905060006020870190506133278260008951846142ae565b6000613332856128d4565b11156133b65760006133448a8a613e5a565b878155905060208601915060008060005b61335e886128d4565b8160ff1610156133b1576133738d8d83612924565b925061338e8a8260ff166028026038011c64ffffffffff1690565b915061339d83600084886142ae565b6133a782866145da565b9450600101613355565b505050505b60005b83518110156134975760008482815181106133d6576133d6614ed9565b602002602001015190506134026002826affffffffffffffffffffff1916612b5690919063ffffffff16565b15613484576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90613451908e908e908e908e908e908e906004016152fb565b600060405180830381600087803b15801561346b57600080fd5b505af115801561347f573d6000803e3d6000fd5b505050505b508061348f81614f61565b9150506133b9565b50505050505050505050565b60408051602081018490529081018290526000906060016127a3565b7f6f74000000000000000000000000000000000000000000000000000000000000837fffff000000000000000000000000000000000000000000000000000000000000160361354557827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d07836040516135389190615354565b60405180910390a2505050565b600061355084613aae565b905060005b815181101561362d57600082828151811061357257613572614ed9565b6020026020010151905061359e6040826affffffffffffffffffffff1916612b5690919063ffffffff16565b1561361a576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf45906135e790899089908990600401615367565b600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b505050505b508061362581614f61565b915050613555565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d078460405161365e9190615354565b60405180910390a26000613672858561278e565b90506136cb81600061368386612878565b67ffffffffffffffff81111561369b5761369b61499c565b6040519080825280601f01601f1916602001820160405280156136c5576020820181803683370190505b50613b49565b60006136d6846128d4565b11156136f75760006136e88686613e5a565b90506136f581602061436e565b505b60005b8251811015610b5f57600083828151811061371757613717614ed9565b602002602001015190506137436080826affffffffffffffffffffff1916612b5690919063ffffffff16565b156137bf576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b9061378c908a908a908a90600401615367565b600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050505b50806137ca81614f61565b9150506136fa565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201526000602282018190527f756e6c696d697465640000000000000000000000000000000000000000000000603083015291016040516020818303038152906040526138459061459d565b909114919050565b600061080782611b018686612911565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061389657613896614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d6573706163654f776e657200000000000000000000000000000000000060308301526000916138f791016125d8565b60601c949350505050565b61390c82826143ab565b611200576040517f74b5e6ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526001600160e01b031982166024820152604401610290565b6060600080610a55878787876140ad565b604080516002808252606082018352600092602083019080368337019050509050836fffffffffffffffffffffffffffffffff1916816000815181106139b6576139b6614ed9565b60200260200101818152505082816001815181106139d6576139d6614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f496e7374616c6c65644d6f64756c65730000000000000000000000000000000060308201528151808203909301835281019052611aa090613a429061459d565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006116d9565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613ae857613ae8614ed9565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b73000000000000000000000000000000000000000000006030830152600091612b3f9101612b1f565b6108fc83838351613b5a8560200190565b6142ae565b6000613b6d607060106145da565b9190911b919050565b606060005b6010811015613bd6576fffffffffffffffffffffffffffffffff198316600882021b7fff000000000000000000000000000000000000000000000000000000000000001615613bd65780613bce81614f61565b915050613b7b565b604080516fffffffffffffffffffffffffffffffff19851660208201528151603090910190915281815280610807565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613c3f57613c3f614ed9565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b6022820152655461626c657360d01b6030820152815180820390930183528101905260009061080790613c979061459d565b8360017e600302202020000000000000000000000000000000000000000000000000006116ac565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613cf857613cf8614ed9565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f757263654964730000000000000000000000000000000000000000006030830152600091613d9591015b604051602081830303815290604052613d6d9061459d565b8360007e010100010000000000000000000000000000000000000000000000000000006116ac565b90506108078160f81c90565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613dda57613dda614ed9565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b6022820152655461626c657360d01b6030820152815180820390930183528101905260009061080790613e329061459d565b8360027e600302202020000000000000000000000000000000000000000000000000006116ac565b60008282604051602001613e6f92919061514a565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000818311158015613ec3575083518211155b613eff578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161029093929190615390565b60208401613f0d84826145da565b90506000613f1b8585614f94565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000610a3d83601560006143c7565b60408051600180825281830190925260009182918291602080830190803683370190505090508381600081518110613f8b57613f8b614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000908190819061402490613ffe9061459d565b857e150200140100000000000000000000000000000000000000000000000000006116ee565b925092509250610a04838383614442565b60006060836001600160a01b0316600061405085898961444e565b60405161405d91906153b5565b60006040518083038185875af1925050503d806000811461409a576040519150601f19603f3d011682016040523d82523d6000602084013e61409f565b606091505b509097909650945050505050565b60006060836001600160a01b03166140c684888861444e565b6040516140d391906153b5565b600060405180830381855af49150503d806000811461409a576040519150601f19603f3d011682016040523d82523d6000602084013e61409f565b60408051600280825260608201835260009283929190602083019080368337019050509050838160008151811061414757614147614ed9565b602002602001018181525050826001600160a01b031660001b8160018151811061417357614173614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f7572636541636365737300000000000000000000000000000000000060308301526000916141d49101613d55565b9050610c538160f81c90565b600064ffffffffff821115614224576040517f4767058800000000000000000000000000000000000000000000000000000000815260048101839052602401610290565b8366ffffffffffffff811660ff851660280260380182901c64ffffffffff16808510614256578085038201915061425e565b848103820391505b5064ffffffffff6038602860ff8816020181811b197fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009490941690921792909216918416901b1790509392505050565b821561432857602083106142d8576020830484019350602083816142d4576142d4615185565b0692505b82156143285760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411614319575050611aa0565b50600194909401939182900391015b5b6020821061434a5780518455600190930192601f1990910190602001614329565b8115611aa0576000600019600884021c198554835182169119161785555050505050565b6000602061437d83601f6145da565b61438791906153d1565b61439190846145da565b90505b808310156108fc5760008355600183019250614394565b60006143b68361447d565b8015610a3d5750610a3d83836144c9565b606060006143d58560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816143fb576143fb615185565b04905060405193506020840160208202810160405281855260005b82811015614436578451871c825293870193602090910190600101614416565b50505050509392505050565b60008061180285614581565b6060838383604051602001614465939291906153f3565b60405160208183030381529060405290509392505050565b60006144a9827f01ffc9a7000000000000000000000000000000000000000000000000000000006144c9565b8015610eb357506144c2826001600160e01b03196144c9565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d9150600051905082801561456a575060208210155b80156145765750600081115b979650505050505050565b6020810151603482015160609190911c9060009060f81c612a81565b805160208083015191908110156145be576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610eb357610eb36145c4565b60008083601f8401126145ff57600080fd5b50813567ffffffffffffffff81111561461757600080fd5b6020830191508360208260051b850101111561463257600080fd5b9250929050565b803560ff811681146126cf57600080fd5b60008060008060006080868803121561466257600080fd5b85359450602086013567ffffffffffffffff81111561468057600080fd5b61468c888289016145ed565b909550935061469f905060408701614639565b949793965091946060013592915050565b60005b838110156146cb5781810151838201526020016146b3565b50506000910152565b600081518084526146ec8160208601602086016146b0565b601f01601f19169290920160200192915050565b602081526000610a3d60208301846146d4565b60008083601f84011261472557600080fd5b50813567ffffffffffffffff81111561473d57600080fd5b60208301915083602082850101111561463257600080fd5b6000806000806000806080878903121561476e57600080fd5b86359550602087013567ffffffffffffffff8082111561478d57600080fd5b6147998a838b016145ed565b90975095508591506147ad60408a01614639565b945060608901359150808211156147c357600080fd5b506147d089828a01614713565b979a9699509497509295939492505050565b600080600080606085870312156147f857600080fd5b84359350602085013567ffffffffffffffff81111561481657600080fd5b614822878288016145ed565b9094509250614835905060408601614639565b905092959194509250565b60008060008060008060008060a0898b03121561485c57600080fd5b88359750602089013567ffffffffffffffff8082111561487b57600080fd5b6148878c838d016145ed565b909950975060408b01359150808211156148a057600080fd5b6148ac8c838d01614713565b909750955060608b0135945060808b01359150808211156148cc57600080fd5b506148d98b828c01614713565b999c989b5096995094979396929594505050565b600080600080600080600060a0888a03121561490857600080fd5b87359650602088013567ffffffffffffffff8082111561492757600080fd5b6149338b838c016145ed565b909850965086915061494760408b01614639565b955060608a013591508082111561495d57600080fd5b5061496a8a828b01614713565b989b979a50959894979596608090950135949350505050565b60006020828403121561499557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156149db576149db61499c565b604052919050565b600082601f8301126149f457600080fd5b813567ffffffffffffffff811115614a0e57614a0e61499c565b614a216020601f19601f840116016149b2565b818152846020838601011115614a3657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614a6657600080fd5b82359150602083013567ffffffffffffffff811115614a8457600080fd5b614a90858286016149e3565b9150509250929050565b60008060008060608587031215614ab057600080fd5b84359350602085013567ffffffffffffffff811115614ace57600080fd5b614ada878288016145ed565b9598909750949560400135949350505050565b606081526000614b0060608301866146d4565b8460208401528281036040840152610a6781856146d4565b600082601f830112614b2957600080fd5b8135602067ffffffffffffffff821115614b4557614b4561499c565b8160051b614b548282016149b2565b9283528481018201928281019087851115614b6e57600080fd5b83870192505b8483101561457657823582529183019190830190614b74565b600080600080600060a08688031215614ba557600080fd5b85359450602086013567ffffffffffffffff811115614bc357600080fd5b614bcf88828901614b18565b945050614bde60408701614639565b94979396509394606081013594506080013592915050565b600080600060408486031215614c0b57600080fd5b83359250602084013567ffffffffffffffff811115614c2957600080fd5b614c35868287016145ed565b9497909650939450505050565b6001600160a01b03811681146114d557600080fd5b600080600060608486031215614c6c57600080fd5b8335614c7781614c42565b925060208401359150604084013567ffffffffffffffff811115614c9a57600080fd5b614ca6868287016149e3565b9150509250925092565b60008060008060808587031215614cc657600080fd5b84359350602085013567ffffffffffffffff811115614ce457600080fd5b614cf087828801614b18565b935050614cff60408601614639565b9396929550929360600135925050565b600080600060608486031215614d2457600080fd5b83359250602084013567ffffffffffffffff811115614d4257600080fd5b614d4e86828701614b18565b925050614d5d60408501614639565b90509250925092565b60008060408385031215614d7957600080fd5b8235614d8481614c42565b9150602083013567ffffffffffffffff811115614a8457600080fd5b60008060008060008060808789031215614db957600080fd5b86359550602087013567ffffffffffffffff80821115614dd857600080fd5b614de48a838b016145ed565b90975095506040890135915065ffffffffffff82168214614e0457600080fd5b909350606088013590808211156147c357600080fd5b803564ffffffffff811681146126cf57600080fd5b60008060008060008060008060c0898b031215614e4b57600080fd5b88359750602089013567ffffffffffffffff80821115614e6a57600080fd5b614e768c838d016145ed565b9099509750879150614e8a60408c01614639565b9650614e9860608c01614e1a565b9550614ea660808c01614e1a565b945060a08b01359150808211156148cc57600080fd5b600060208284031215614ece57600080fd5b8135610a3d81614c42565b634e487b7160e01b600052603260045260246000fd5b604081526000614f0260408301856146d4565b90506001600160a01b03831660208301529392505050565b600060ff821660ff8103614f3057614f306145c4565b60010192915050565b6001600160a01b0384168152826020820152606060408201526000610c5360608301846146d4565b60006000198203614f7457614f746145c4565b5060010190565b60ff8281168282160390811115610eb357610eb36145c4565b81810381811115610eb357610eb36145c4565b600060208284031215614fb957600080fd5b81518015158114610a3d57600080fd5b600060208284031215614fdb57600080fd5b81516fffffffffffffffffffffffffffffffff1981168114610a3d57600080fd5b600081518084526020808501945080840160005b8381101561502c57815187529582019590820190600101615010565b509495945050505050565b60608152600061504a6060830186614ffc565b65ffffffffffff851660208401528281036040840152610a6781856146d4565b8481526080602082015260006150836080830186614ffc565b65ffffffffffff85166040840152828103606084015261457681856146d4565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516151048160038601602089016146b0565b8084019050816003820152845191506151248260048301602088016146b0565b0160040195945050505050565b82815260406020820152600061080760408301846146d4565b82815260006020808301845182860160005b828110156151785781518452928401929084019060010161515c565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b8082028115828204841417610eb357610eb36145c4565b7fffff00000000000000000000000000000000000000000000000000000000000084168152826020820152606060408201526000610c5360608301846146d4565b64ffffffffff818116838216019080821115615211576152116145c4565b5092915050565b87815260e06020820152600061523160e0830189614ffc565b60ff8816604084015264ffffffffff87811660608501528616608084015260a0830185905282810360c084015261526881856146d4565b9a9950505050505050505050565b60a08152600061528960a0830188614ffc565b65ffffffffffff8716602084015264ffffffffff861660408401528460608401528281036080840152611eb381856146d4565b6080815260006152cf6080830187614ffc565b82810360208401526152e181876146d4565b9050846040840152828103606084015261457681856146d4565b86815260c06020820152600061531460c0830188614ffc565b828103604084015261532681886146d4565b9050856060840152828103608084015261534081866146d4565b9150508260a0830152979650505050505050565b602081526000610a3d6020830184614ffc565b8381526060602082015260006153806060830185614ffc565b9050826040830152949350505050565b6060815260006153a360608301866146d4565b60208301949094525060400152919050565b600082516153c78184602087016146b0565b9190910192915050565b6000826153ee57634e487b7160e01b600052601260045260246000fd5b500490565b600084516154058184602089016146b0565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815260148101919091526034019291505056fea164736f6c6343000815000a60c0604052604051620000129062000088565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b03166080526040516200004a9062000096565b604051809103906000f08015801562000067573d6000803e3d6000fd5b506001600160a01b031660a0523480156200008157600080fd5b50620000a4565b61087d8062002ad783390190565b612709806200335483390190565b60805160a0516129ff620000d8600039600081816103ed015261075c0152600081816104fa01526108b101526129ff6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806317d7de7c1161005b57806317d7de7c146100df57806345ec9354146100f65780637c5b033514610109578063e1af802c1461011c57600080fd5b806301ffc9a714610082578063119df25f146100aa57806313861fb5146100ca575b600080fd5b6100956100903660046124be565b610124565b60405190151581526020015b60405180910390f35b6100b2610209565b6040516001600160a01b0390911681526020016100a1565b6100dd6100d8366004612516565b610218565b005b604051651c1d5c1c195d60d21b81526020016100a1565b604051601f1936013581526020016100a1565b6100dd610117366004612516565b61055f565b6100b2610987565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780ac2fc0000000000000000000000000000000000000000000000000000000014806101b757507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b8061020357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000610213610991565b905090565b6000610222610987565b6040517f6e730000000000000000000000000000000000000000000000000000000000006020820152651c1d5c1c195d60d21b60228201529091506001600160a01b0382169063b29e408990603001604051602081830303815290604052610289906125c7565b6040518263ffffffff1660e01b81526004016102a791815260200190565b600060405180830381600087803b1580156102c157600080fd5b505af11580156102d5573d6000803e3d6000fd5b505060408051613a3160f11b6020820152651c1d5c1c195d60d21b60228201527f5075707065745265676973747279000000000000000000000000000000000000603082015261034193500190505b60405160208183030381529060405261033c906125c7565b6109c3565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526001600160a01b03831691633350b6a991016040516020818303038152906040526103af906125c7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260016044820152606401600060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b50506040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201526001600160a01b0385169350633350b6a99250016040516020818303038152906040526104bc906125c7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260016044820152606401600060405180830381600087803b15801561054357600080fd5b505af1158015610557573d6000803e3d6000fd5b505050505050565b6000610569610987565b6040517f6e730000000000000000000000000000000000000000000000000000000000006020820152651c1d5c1c195d60d21b602282015290915060009081906001600160a01b03841690819063b29e4089906030016040516020818303038152906040526105d7906125c7565b6040516024016105e991815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b939093179092529051610636925061260f565b600060405180830381855af49150503d8060008114610671576040519150601f19603f3d011682016040523d82523d6000602084013e610676565b606091505b5091509150816106895761068981610a0f565b60408051613a3160f11b6020820152651c1d5c1c195d60d21b60228201527f507570706574526567697374727900000000000000000000000000000000000060308201526106d79101610324565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526001600160a01b038516918291633350b6a99101604051602081830303815290604052610747906125c7565b60405160248101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660448201526001606482015260840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516107d8925061260f565b600060405180830381855af49150503d8060008114610813576040519150601f19603f3d011682016040523d82523d6000602084013e610818565b606091505b5090925090508161082c5761082c81610a0f565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201526001600160a01b038516918291633350b6a9910160405160208183030381529060405261089c906125c7565b60405160248101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660448201526001606482015260840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b93909317909252905161092d925061260f565b600060405180830381855af49150503d8060008114610968576040519150601f19603f3d011682016040523d82523d6000602084013e61096d565b606091505b509092509050816109815761098181610a0f565b50505050565b6000610213610a17565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806109c05750335b90565b610a0c817e140100140000000000000000000000000000000000000000000000000000006109ef610a56565b6109f7610ace565b6109ff610b08565b610a07610b8d565b610bed565b50565b805160208201fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e175546000906001600160a01b031680610a51573391505090565b919050565b60408051600180825281830190925260009182919060208083019080368337019050509050605f81600081518110610a9057610a9061262b565b602002602001019060c5811115610aa957610aa9612641565b908160c5811115610abc57610abc612641565b905250610ac881610ca7565b91505090565b60408051600180825281830190925260009182919060208083019080368337019050509050606181600081518110610a9057610a9061262b565b604080516001808252818301909252606091816020015b6060815260200190600190039081610b1f5790505090506040518060400160405280600881526020017f73797374656d496400000000000000000000000000000000000000000000000081525081600081518110610b7f57610b7f61262b565b602002602001018190525090565b604080516001808252818301909252606091816020015b6060815260200190600190039081610ba4579050509050604051806040016040528060068152602001651c1d5c1c195d60d21b81525081600081518110610b7f57610b7f61262b565b6000610bf7610a17565b9050306001600160a01b03821603610c1c57610c17878787878787610e6b565b610c9e565b6040517f0ba51f490000000000000000000000000000000000000000000000000000000081526001600160a01b03821690630ba51f4990610c6b908a908a908a908a908a908a906004016126d5565b600060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b505050505b50505050505050565b6000601c82511115610cda578151604051635318beb960e01b8152600401610cd191815260200190565b60405180910390fd5b60008080805b8551811015610db5576000610d1e878381518110610d0057610d0061262b565b602002602001015160c5811115610d1957610d19612641565b611156565b905080600003610d3357600190920191610d6b565b8215610d6b576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80840193506008826004601f030302878381518110610d8c57610d8c61262b565b602002602001015160c5811115610da557610da5612641565b901b949094179350600101610ce0565b506005811115610ddb57604051635318beb960e01b815260048101829052602401610cd1565b84518190036008610dee60026020612735565b610df89190612748565b83901b939093179260086001610e1060026020612735565b610e1a9190612735565b610e249190612748565b81901b93909317926008600180610e3d60026020612735565b610e479190612735565b610e519190612735565b610e5b9190612748565b9190911b92909217949350505050565b613a3160f11b867fffff0000000000000000000000000000000000000000000000000000000000001614801590610ee457507f6f74000000000000000000000000000000000000000000000000000000000000867fffff0000000000000000000000000000000000000000000000000000000000001614155b15610f4557613a3160f11b8687604051602001610f0391815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252610cd193929160040161275f565b610f4e856111b6565b610f5984600161133e565b610f6483600061133e565b60e084901c60e885901c0160ff16825114610fc45760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b60e085901c60e886901c0160ff168151146110245760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff161461109c5760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b6110a5866114e5565b156110ff5785866040516020016110be91815260200190565b60408051601f19818403018152908290527fdfaaf9cf000000000000000000000000000000000000000000000000000000008252610cd192916004016127a0565b61114b868686868660405160200161111791906127b9565b6040516020818303038152906040528660405160200161113791906127b9565b6040516020818303038152906040526115c9565b6105578660016116e9565b6000808260c581111561116b5761116b612641565b60ff169050606181101561118557601f1660010192915050565b60618360c581111561119957611199612641565b036111a75750601492915050565b50600092915050565b50919050565b806111ed576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111f8826117e0565b9050600581111561123f576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401610cd1565b600061124a8361181d565b9050600061125883836127cc565b9050601c81111561129f576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401610cd1565b60005b828110156113375760ff601b82900360080286901c1660008190036112f3576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081111561132e576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016112a2565b5050505050565b8015801561134a575081155b1561136b57604051635318beb960e01b815260006004820152602401610cd1565b6000611376836117e0565b9050600581111561139d57604051635318beb960e01b815260048101829052602401610cd1565b60006113a88461181d565b905060006113b683836127cc565b9050601c8111156113dd57604051635318beb960e01b815260048101829052602401610cd1565b60008060005b8381101561149e57600061140b6113fa8a8461182f565b60c5811115610d1957610d19612641565b11156114555784811061144a576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600190920191611496565b8481101561148f576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b6001016113e3565b508382146114c257604051635318beb960e01b815260048101839052602401610cd1565b848114610c9e57604051635318beb960e01b815260048101829052602401610cd1565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061151e5761151e61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526000906115b59061158d906125c7565b8360007e01010001000000000000000000000000000000000000000000000000000000611857565b90506115c18160f81c90565b949350505050565b604080516020810187905280820186905260608082018690528251808303909101815260809091019091526000611600848461188d565b9050600061160e85856118aa565b604080516001808252818301909252919250600091906020808301908036833701905050905089816000815181106116485761164861262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526116dd906116b4906125c7565b828686867e600302202020000000000000000000000000000000000000000000000000006118d6565b50505050505050505050565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061171f5761171f61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526117db9061178b906125c7565b826000856040516020016117a691151560f81b815260010190565b60408051601f198184030181529190527e01010001000000000000000000000000000000000000000000000000000000611c23565b505050565b600060086001806117f360026020612735565b6117fd9190612735565b6118079190612735565b6118119190612748565b8260ff911c1692915050565b6000600860016117fd60026020612735565b6000601b8290036008028360ff911c1660c581111561185057611850612641565b9392505050565b60006118846118668686611c38565b60ff858116601b0360080285901c1661187f8587611c8e565b611cd1565b95945050505050565b8151815160009181810160389190911b1760609190911b17611850565b606082826040516020016118bf9291906127df565b604051602081830303815290604052905092915050565b7f6f74000000000000000000000000000000000000000000000000000000000000867fffff000000000000000000000000000000000000000000000000000000000000160361196257857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9868686866040516119559493929190612849565b60405180910390a2610557565b600061196d87611d22565b905060005b8151811015611a5057600082828151811061198f5761198f61262b565b602002602001015190506119bb6001826affffffffffffffffffffff1916611dea90919063ffffffff16565b15611a3d576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90611a0a908c908c908c908c908c908c90600401612893565b600060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b505050505b5080611a48816128ec565b915050611972565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051611a879493929190612849565b60405180910390a26000611a9b8888611c38565b90506000602087019050611ab3826000895184611e08565b6000611abe856117e0565b1115611b42576000611ad08a8a611ec8565b878155905060208601915060008060005b611aea886117e0565b8160ff161015611b3d57611aff8d8d83611f1e565b9250611b1a8a8260ff166028026038011c64ffffffffff1690565b9150611b298360008488611e08565b611b3382866127cc565b9450600101611ae1565b505050505b60005b83518110156116dd576000848281518110611b6257611b6261262b565b60200260200101519050611b8e6002826affffffffffffffffffffff1916611dea90919063ffffffff16565b15611c10576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90611bdd908e908e908e908e908e908e90600401612893565b600060405180830381600087803b158015611bf757600080fd5b505af1158015611c0b573d6000803e3d6000fd5b505050505b5080611c1b816128ec565b915050611b45565b6113378585611c328487611c8e565b85611f9e565b60008282604051602001611c4d929190612906565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff16811015611cc957611cb560ff601b83900360080287901c16836127cc565b915080611cc1816128ec565b915050611c93565b509392505050565b600060208210611cf757602082048401935060208281611cf357611cf3612941565b0691505b508254600882021b602082900380841115611cc9576001850154600882021c82179150509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611d5c57611d5c61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090611dd390611dcb906125c7565b83600061224d565b90506115c1611de58260008451612287565b612317565b60008160ff1682611dfb8560581c90565b1660ff1614905092915050565b8215611e825760208310611e3257602083048401935060208381611e2e57611e2e612941565b0692505b8215611e825760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411611e73575050610981565b50600194909401939182900391015b5b60208210611ea45780518455600190930192601f1990910190602001611e83565b8115610981576000600019600884021c198554835182169119161785555050505050565b60008282604051602001611edd929190612906565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b60008383604051602001611f33929190612906565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff000000000000000000000000000000000000000000000000000000000000160361202857837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161201b93929190612957565b60405180910390a2610981565b60006120348585611c38565b9050600061204186611d22565b905060005b81518110156121205760008282815181106120635761206361262b565b6020026020010151905061208f6004826affffffffffffffffffffff1916611dea90919063ffffffff16565b1561210d576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d906120da908b908b908b908b90600401612994565b600060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b505050505b5080612118816128ec565b915050612046565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be86868660405161215593929190612957565b60405180910390a2612170828565ffffffffffff1685612328565b60005b8151811015610c9e5760008282815181106121905761219061262b565b602002602001015190506121bc6008826affffffffffffffffffffff1916611dea90919063ffffffff16565b1561223a576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190612207908b908b908b908b90600401612994565b600060405180830381600087803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b505050505b5080612245816128ec565b915050612173565b60606115c161225d858585611f1e565b60006122828561226d898961233e565b9060ff166028026038011c64ffffffffff1690565b612351565b600081831115801561229a575083518211155b6122d6578383836040517f23230fa3000000000000000000000000000000000000000000000000000000008152600401610cd1939291906129cd565b602084016122e484826127cc565b905060006122f28585612735565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006118508360156000612374565b6117db838383516123398560200190565b611e08565b600061185061234d8484611ec8565b5490565b60405160208101601f19603f8484010116604052828252611cc9858585846123ef565b606060006123828560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816123a8576123a8612941565b04905060405193506020840160208202810160405281855260005b828110156123e3578451871c8252938701936020909101906001016123c3565b50505050509392505050565b821561247857602083106124195760208304840193506020838161241557612415612941565b0692505b821561247857602083900360008184101561243d5750600019600884021c19612448565b50600019600882021c195b8554600886021b811984511682821617845250818411612469575050610981565b50600194909401939182900391015b5b6020821061249a5783548152600190930192601f1990910190602001612479565b8115610981576000600019600884021c198251865482169119161782525050505050565b6000602082840312156124d057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461185057600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561252857600080fd5b813567ffffffffffffffff8082111561254057600080fd5b818401915084601f83011261255457600080fd5b81358181111561256657612566612500565b604051601f8201601f19908116603f0116810190838211818310171561258e5761258e612500565b816040528281528760208487010111156125a757600080fd5b826020860160208301376000928101602001929092525095945050505050565b805160208083015191908110156111b05760001960209190910360031b1b16919050565b60005b838110156126065781810151838201526020016125ee565b50506000910152565b600082516126218184602087016125eb565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000815180845261266f8160208601602086016125eb565b601f01601f19169290920160200192915050565b6000815180845260208085019450848260051b860182860160005b858110156126c85783830389526126b6838351612657565b9885019892509084019060010161269e565b5090979650505050505050565b86815285602082015284604082015283606082015260c06080820152600061270060c0830185612683565b82810360a08401526127128185612683565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102035761020361271f565b80820281158282048414176102035761020361271f565b7fffff000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006118846060830184612657565b8281526040602082015260006115c16040830184612657565b6020815260006118506020830184612683565b808201808211156102035761020361271f565b600083516127f18184602088016125eb565b8351908301906128058183602088016125eb565b01949350505050565b600081518084526020808501945080840160005b8381101561283e57815187529582019590820190600101612822565b509495945050505050565b60808152600061285c608083018761280e565b828103602084015261286e8187612657565b905084604084015282810360608401526128888185612657565b979650505050505050565b86815260c0602082015260006128ac60c083018861280e565b82810360408401526128be8188612657565b905085606084015282810360808401526128d88186612657565b9150508260a0830152979650505050505050565b600060001982036128ff576128ff61271f565b5060010190565b82815260006020808301845182860160005b8281101561293457815184529284019290840190600101612918565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b60608152600061296a606083018661280e565b65ffffffffffff85166020840152828103604084015261298a8185612657565b9695505050505050565b8481526080602082015260006129ad608083018661280e565b65ffffffffffff8516604084015282810360608401526128888185612657565b6060815260006129e06060830186612657565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b5061085d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80631a86b550116100505780631a86b550146100c157806345ec9354146100d4578063e1af802c146100e757600080fd5b806301ffc9a71461006c578063119df25f14610094575b600080fd5b61007f61007a3660046105c6565b6100ef565b60405190151581526020015b60405180910390f35b61009c6101d4565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b61007f6100cf366004610625565b6101e3565b604051601f19360135815260200161008b565b61009c6102c2565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faf58547700000000000000000000000000000000000000000000000000000000148061018257507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b806101ce57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101de6102cc565b905090565b6000806101ee6101d4565b604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f5075707065745265676973747279000000000000000000000000000000000000603082015291925073ffffffffffffffffffffffffffffffffffffffff8316916102a2910160405160208183030381529060405261029c9061070b565b866102fe565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60006101de61037b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102fb5750335b90565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061033757610337610732565b6020908102919091010152600061036f8583837e140100140000000000000000000000000000000000000000000000000000006103c7565b60601c95945050505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff16806103c2573391505090565b919050565b6000806103d261037b565b90503073ffffffffffffffffffffffffffffffffffffffff821603610405576103fd868686866104a6565b91505061049e565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d599061045d908990899089908990600401610748565b602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fd91906107a3565b949350505050565b60006104d36104b586866104dc565b60ff858116601b0360080285901c166104ce8587610532565b610575565b95945050505050565b600082826040516020016104f19291906107bc565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561056d5761055960ff601b83900360080287901c168361080d565b91508061056581610820565b915050610537565b509392505050565b60006020821061059b576020820484019350602082816105975761059761083a565b0691505b508254600882021b60208290038084111561056d576001850154600882021c82179150509392505050565b6000602082840312156105d857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461060857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561063a57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461065e57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561068257600080fd5b818601915086601f83011261069657600080fd5b8135818111156106a8576106a861060f565b604051601f8201601f19908116603f011681019083821181831017156106d0576106d061060f565b816040528281528960208487010111156106e957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8051602080830151919081101561072c576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156107895784518352938301939183019160010161076d565b505060ff9690961660408501525050506060015292915050565b6000602082840312156107b557600080fd5b5051919050565b82815260006020808301845182860160005b828110156107ea578151845292840192908401906001016107ce565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101ce576101ce6107f7565b60006000198203610833576108336107f7565b5060010190565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000a608060405234801561001057600080fd5b506126e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806345ec93541161005057806345ec9354146100c1578063b9eb8bfb146100d4578063e1af802c146100e757600080fd5b806301ffc9a71461006c578063119df25f14610094575b600080fd5b61007f61007a366004611297565b6100ef565b60405190151581526020015b60405180910390f35b61009c610188565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b604051601f19360135815260200161008b565b61009c6100e23660046112d9565b610197565b61009c6102a0565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000148061018257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101926102aa565b905090565b60006101aa826101a5610188565b6102dc565b6101b26102a0565b826040516101bf9061128a565b73ffffffffffffffffffffffffffffffffffffffff90921682526020820152604001604051809103906000f0801580156101fd573d6000803e3d6000fd5b50604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f5075707065745265676973747279000000000000000000000000000000000000603082015291925061029b9101604051602081830303815290604052610294906112f2565b83836103a4565b919050565b6000610192610464565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102d95750335b90565b73ffffffffffffffffffffffffffffffffffffffff811661033e7f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff000000000000000000000000000000008516176104ab565b73ffffffffffffffffffffffffffffffffffffffff16146103a057610362826105b9565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610397929190611369565b60405180910390fd5b5050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106103da576103da6113a1565b60200260200101818152505061045e8482600085604051602001610429919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b60408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006106f6565b50505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff168061029b573391505090565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106104e4576104e46113a1565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906105ae90610586906112f2565b8360007e140100140000000000000000000000000000000000000000000000000000006107c6565b60601c949350505050565b606081601081901b60006105cc836108a5565b9050827fffffffffffffffffffffffffffff000000000000000000000000000000000000831615610627576106227fffffffffffffffffffffffffffff00000000000000000000000000000000000084166108bc565b61065e565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156106945761068f836108bc565b6106cb565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016106dd939291906113d0565b6040516020818303038152906040529350505050919050565b6000610700610464565b90503073ffffffffffffffffffffffffffffffffffffffff8216036107315761072c868686868661096a565b6107be565b6040517f390baae000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063390baae09061078b9089908990899089908990600401611499565b600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b505050505b505050505050565b6000806107d1610464565b90503073ffffffffffffffffffffffffffffffffffffffff821603610804576107fc86868686610986565b91505061089d565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d599061085c9089908990899089906004016114e0565b602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc919061150f565b949350505050565b60006108b360706010611557565b9190911b919050565b606060005b601081101561092b577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff00000000000000000000000000000000000000000000000000000000000000161561092b57806109238161156a565b9150506108c1565b604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166020820152815160309091019091528181528061089d565b61097f858561097984876109bc565b856109ff565b5050505050565b60006109b36109958686610cb7565b60ff858116601b0360080285901c166109ae85876109bc565b610d0d565b95945050505050565b600080805b8360ff168110156109f7576109e360ff601b83900360080287901c1683611557565b9150806109ef8161156a565b9150506109c1565b509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610a8957837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610a7c93929190611584565b60405180910390a261045e565b6000610a958585610cb7565b90506000610aa286610d5e565b905060005b8151811015610b81576000828281518110610ac457610ac46113a1565b60200260200101519050610af06004826affffffffffffffffffffff1916610e5990919063ffffffff16565b15610b6e576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610b3b908b908b908b908b906004016115c1565b600060405180830381600087803b158015610b5557600080fd5b505af1158015610b69573d6000803e3d6000fd5b505050505b5080610b798161156a565b915050610aa7565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610bb693929190611584565b60405180910390a2610bd1828565ffffffffffff1685610e77565b60005b8151811015610cae576000828281518110610bf157610bf16113a1565b60200260200101519050610c1d6008826affffffffffffffffffffff1916610e5990919063ffffffff16565b15610c9b576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610c68908b908b908b908b906004016115c1565b600060405180830381600087803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b505050505b5080610ca68161156a565b915050610bd4565b50505050505050565b60008282604051602001610ccc929190611605565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600060208210610d3357602082048401935060208281610d2f57610d2f611640565b0691505b508254600882021b6020829003808411156109f7576001850154600882021c82179150509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610d9857610d986113a1565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090610e4290610e3a906112f2565b836000610e92565b905061089d610e548260008451610ecc565b610f5c565b60008160ff1682610e6a8560581c90565b1660ff1614905092915050565b610e8d83838351610e888560200190565b610f74565b505050565b606061089d610ea2858585611034565b6000610ec785610eb289896110b4565b9060ff166028026038011c64ffffffffff1690565b6110c7565b6000818311158015610edf575083518211155b610f1b578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016103979392919061166f565b60208401610f298482611557565b90506000610f378585611694565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000610f6d83601560006110ea565b9392505050565b8215610fee5760208310610f9e57602083048401935060208381610f9a57610f9a611640565b0692505b8215610fee5760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411610fdf57505061045e565b50600194909401939182900391015b5b602082106110105780518455600190930192601f1990910190602001610fef565b811561045e576000600019600884021c198554835182169119161785555050505050565b60008383604051602001611049929190611605565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b6000610f6d6110c38484611165565b5490565b60405160208101601f19603f84840101166040528282526109f7858585846111bb565b606060006110f88560801c90565b90506fffffffffffffffffffffffffffffffff8516600085828161111e5761111e611640565b04905060405193506020840160208202810160405281855260005b82811015611159578451871c825293870193602090910190600101611139565b50505050509392505050565b6000828260405160200161117a929190611605565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b821561124457602083106111e5576020830484019350602083816111e1576111e1611640565b0692505b82156112445760208390036000818410156112095750600019600884021c19611214565b50600019600882021c195b8554600886021b81198451168282161784525081841161123557505061045e565b50600194909401939182900391015b5b602082106112665783548152600190930192601f1990910190602001611245565b811561045e576000600019600884021c198251865482169119161782525050505050565b611035806116a883390190565b6000602082840312156112a957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f6d57600080fd5b6000602082840312156112eb57600080fd5b5035919050565b80516020808301519190811015611313576000198160200360031b1b821691505b50919050565b60005b8381101561133457818101518382015260200161131c565b50506000910152565b60008151808452611355816020860160208601611319565b601f01601f19169290920160200192915050565b60408152600061137c604083018561133d565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a000000000000000000000000000000000000000000000000000000000000008060028401528451611431816003860160208901611319565b808401905081600382015284519150611451826004830160208801611319565b0160040195945050505050565b600081518084526020808501945080840160005b8381101561148e57815187529582019590820190600101611472565b509495945050505050565b85815260a0602082015260006114b260a083018761145e565b60ff8616604084015282810360608401526114cd818661133d565b9150508260808301529695505050505050565b8481526080602082015260006114f9608083018661145e565b60ff949094166040830152506060015292915050565b60006020828403121561152157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561018257610182611528565b6000600019820361157d5761157d611528565b5060010190565b606081526000611597606083018661145e565b65ffffffffffff8516602084015282810360408401526115b7818561133d565b9695505050505050565b8481526080602082015260006115da608083018661145e565b65ffffffffffff8516604084015282810360608401526115fa818561133d565b979650505050505050565b82815260006020808301845182860160005b8281101561163357815184529284019290840190600101611617565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b606081526000611682606083018661133d565b60208301949094525060400152919050565b818103818111156101825761018261152856fe60c060405234801561001057600080fd5b5060405161103538038061103583398101604081905261002f9161007c565b6001600160a01b038216608081905260a08290527f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e17580546001600160a01b031916909117905550506100b6565b6000806040838503121561008f57600080fd5b82516001600160a01b03811681146100a657600080fd5b6020939093015192949293505050565b60805160a051610f326101036000396000818160e1015281816101b401528181610239015281816102b70152818161032e01526103a101526000818160b201526101630152610f326000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063c9a34acd11610050578063c9a34acd146101f9578063d72a26651461020c578063e2ed58bd1461021f57610072565b806330b67baa1461015e57806339f898bc146101af57806366c93bdb146101e4575b6040517f894ecc5800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063894ecc589061010d9033907f00000000000000000000000000000000000000000000000000000000000000009086903690600401610a5c565b6000604051808303816000875af115801561012c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101549190810190610b88565b9050805160208201f35b6101857f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101d67f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101a6565b6101f76101f2366004610c16565b610232565b005b6101f7610207366004610c7a565b6102b0565b6101f761021a366004610cd4565b610327565b6101f761022d366004610d1b565b61039a565b600061025d7f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff82161461029d576040516398d49b0360e01b81523360048201526024015b60405180910390fd5b82848688855160208701a4505050505050565b60006102db7f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff821614610316576040516398d49b0360e01b8152336004820152602401610294565b828486845160208601a35050505050565b60006103527f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff82161461038d576040516398d49b0360e01b8152336004820152602401610294565b82825160208401a1505050565b60006103c57f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff821614610400576040516398d49b0360e01b8152336004820152602401610294565b8284835160208501a250505050565b6040805160018082528183019092526000918291829160208083019080368337019050509050838160008151811061044957610449610d6b565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f53797374656d73000000000000000000000000000000000000000000000000006030820152815180820390930183528101905260009081908190610515906104ef90610d81565b857e1502001401000000000000000000000000000000000000000000000000000061053a565b5050602081015160349091015160609190911c9860f89190911c975095505050505050565b606060006060600061054a610624565b90503073ffffffffffffffffffffffffffffffffffffffff82160361058057610574878787610670565b9350935093505061061b565b6040517f419b58fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063419b58fd906105d6908a908a908a90600401610da8565b600060405180830381865afa1580156105f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105749190810190610dff565b93509350939050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff168061066b573391505090565b919050565b606060006060600061068185610778565b905061068e87878361079b565b9350600061069b866107df565b9050801561076d576106ad888861081c565b935066ffffffffffffff841667ffffffffffffffff8111156106d1576106d1610aaf565b6040519080825280601f01601f1916602001820160405280156106fb576020820181803683370190505b5092506020830160005b828160ff16101561076a57600061071d8b8b84610838565b9050600061073a888460ff166028026038011c64ffffffffff1690565b905061074982600083876108b8565b6107538185610e78565b93505050808061076290610e8b565b915050610705565b50505b505093509350939050565b6000600861078860026020610eaa565b6107929190610ebd565b9190911c919050565b6060816000036107ba57506040805160208101909152600081526107d8565b60006107c68585610985565b90506107d4816000856109db565b9150505b9392505050565b600060086001806107f260026020610eaa565b6107fc9190610eaa565b6108069190610eaa565b6108109190610ebd565b8260ff911c1692915050565b600061082f61082b8484610a06565b5490565b90505b92915050565b6000838360405160200161084d929190610ed4565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b821561094157602083106108e2576020830484019350602083816108de576108de610f0f565b0692505b82156109415760208390036000818410156109065750600019600884021c19610911565b50600019600882021c195b8554600886021b81198451168282161784525081841161093257505061097f565b50600194909401939182900391015b5b602082106109635783548152600190930192601f1990910190602001610942565b811561097f5780518454600019600885021c9182169119161781525b50505050565b6000828260405160200161099a929190610ed4565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b60405160208101601f19603f84840101166040528282526109fe858585846108b8565b509392505050565b60008282604051602001610a1b929190610ed4565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610aee57610aee610aaf565b604052919050565b600067ffffffffffffffff821115610b1057610b10610aaf565b50601f01601f191660200190565b600082601f830112610b2f57600080fd5b8151610b42610b3d82610af6565b610ac5565b81815260208581848701011115610b5857600080fd5b60005b83811015610b76578581018201518382018301528101610b5b565b50600092820101919091529392505050565b600060208284031215610b9a57600080fd5b815167ffffffffffffffff811115610bb157600080fd5b610bbd84828501610b1e565b949350505050565b600082601f830112610bd657600080fd5b8135610be4610b3d82610af6565b818152846020838601011115610bf957600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610c2e57600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115610c6157600080fd5b610c6d88828901610bc5565b9150509295509295909350565b60008060008060808587031215610c9057600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115610cbc57600080fd5b610cc887828801610bc5565b91505092959194509250565b60008060408385031215610ce757600080fd5b82359150602083013567ffffffffffffffff811115610d0557600080fd5b610d1185828601610bc5565b9150509250929050565b600080600060608486031215610d3057600080fd5b8335925060208401359150604084013567ffffffffffffffff811115610d5557600080fd5b610d6186828701610bc5565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b80516020808301519190811015610da2576000198160200360031b1b821691505b50919050565b6000606082018583526020606081850152818651808452608086019150828801935060005b81811015610de957845183529383019391830191600101610dcd565b5050809350505050826040830152949350505050565b600080600060608486031215610e1457600080fd5b835167ffffffffffffffff80821115610e2c57600080fd5b610e3887838801610b1e565b9450602086015193506040860151915080821115610e5557600080fd5b50610d6186828701610b1e565b634e487b7160e01b600052601160045260246000fd5b8082018082111561083257610832610e62565b600060ff821660ff8103610ea157610ea1610e62565b60010192915050565b8181038181111561083257610832610e62565b808202811582820484141761083257610832610e62565b82815260006020808301845182860160005b82811015610f0257815184529284019290840190600101610ee6565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000aa164736f6c6343000815000a608060405234801561001057600080fd5b50610a77806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806345ec93541161005057806345ec9354146100ec578063d737d0c7146100ff578063e1af802c1461010757600080fd5b806301ffc9a714610077578063119df25f1461009f578063319585fb146100cc575b600080fd5b61008a6100853660046107a3565b61010f565b60405190151581526020015b60405180910390f35b6100a76101a8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100df6100da366004610802565b6101b7565b60405161009691906108f9565b604051601f193601358152602001610096565b6100a7610272565b6100a761027c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101b2610286565b905090565b60606101c16102b8565b73ffffffffffffffffffffffffffffffffffffffff1663d72a26657fe762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d8460405160200161020e91906108f9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161023a92919061090c565b600060405180830381600087803b15801561025457600080fd5b505af1158015610268573d6000803e3d6000fd5b5093949350505050565b60006101b26101a8565b60006101b26103bf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102b55750335b90565b6000806102c43061040b565b604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f50757070657452656769737472790000000000000000000000000000000000006030820152919250600091610363910160405160208183030381529060405261035d90610925565b8361052f565b905073ffffffffffffffffffffffffffffffffffffffff81166101a2576040517f9434f7e10000000000000000000000000000000000000000000000000000000081523060048201526024810183905260440160405180910390fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610406573391505090565b919050565b604080516001808252818301909252600091829190602080830190803683370190505090508273ffffffffffffffffffffffffffffffffffffffff1660001b8160008151811061045d5761045d61094c565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f53797374656d526567697374727900000000000000000000000000000000000060308201528151808203909301835281019052600090610527906104ff90610925565b8360007e200100200000000000000000000000000000000000000000000000000000006105ac565b949350505050565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106105685761056861094c565b602090810291909101015260006105a08583837e140100140000000000000000000000000000000000000000000000000000006105ac565b60601c95945050505050565b6000806105b76103bf565b90503073ffffffffffffffffffffffffffffffffffffffff8216036105ea576105e286868686610683565b915050610527565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d5990610642908990899089908990600401610962565b602060405180830381865afa15801561065f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e291906109bd565b60006106b061069286866106b9565b60ff858116601b0360080285901c166106ab858761070f565b610752565b95945050505050565b600082826040516020016106ce9291906109d6565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561074a5761073660ff601b83900360080287901c1683610a27565b91508061074281610a3a565b915050610714565b509392505050565b6000602082106107785760208204840193506020828161077457610774610a54565b0691505b508254600882021b60208290038084111561074a576001850154600882021c82179150509392505050565b6000602082840312156107b557600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146107e557600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561081457600080fd5b813567ffffffffffffffff8082111561082c57600080fd5b818401915084601f83011261084057600080fd5b813581811115610852576108526107ec565b604051601f8201601f19908116603f0116810190838211818310171561087a5761087a6107ec565b8160405282815287602084870101111561089357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000815180845260005b818110156108d9576020818501810151868301820152016108bd565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006107e560208301846108b3565b82815260406020820152600061052760408301846108b3565b80516020808301519190811015610946576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156109a357845183529383019391830191600101610987565b505060ff9690961660408501525050506060015292915050565b6000602082840312156109cf57600080fd5b5051919050565b82815260006020808301845182860160005b82811015610a04578151845292840192908401906001016109e8565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101a2576101a2610a11565b60006000198203610a4d57610a4d610a11565b5060010190565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000a608060405234801561001057600080fd5b50611a59806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806345ec93541161005b57806345ec9354146100ec5780638d53b208146100ff578063e1af802c14610112578063ef5d6bbb1461011a57600080fd5b806301ffc9a714610082578063119df25f146100aa57806340554c3a146100d7575b600080fd5b61009561009036600461165b565b61012d565b60405190151581526020015b60405180910390f35b6100b26101c6565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100ea6100e536600461169d565b6101d5565b005b604051601f1936013581526020016100a1565b6100ea61010d36600461169d565b6101f6565b6100b261020c565b6100ea61012836600461169d565b610216565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101c057507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101d061023d565b905090565b6101e6826101e16101c6565b61026f565b6101f282826001610333565b5050565b610202826101e16101c6565b6101f28282610463565b60006101d0610568565b610222826101e16101c6565b61022c82826105b4565b6101e6826102386101c6565b610463565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c8061026c5750335b90565b73ffffffffffffffffffffffffffffffffffffffff81166102d17f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff000000000000000000000000000000008516176106c2565b73ffffffffffffffffffffffffffffffffffffffff16146101f2576102f58261079d565b816040517fd787b73700000000000000000000000000000000000000000000000000000000815260040161032a929190611736565b60405180910390fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061036857610368611784565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106103a1576103a1611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f757263654163636573730000000000000000000000000000000000006030820152815180820390930183528101905261045d9061040d9061179a565b8260008560405160200161042891151560f81b815260010190565b60408051601f198184030181529190527e010100010000000000000000000000000000000000000000000000000000006108da565b50505050565b604080516002808252606082018352600092602083019080368337019050509050828160008151811061049857610498611784565b6020026020010181815250508173ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106104d1576104d1611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f75726365416363657373000000000000000000000000000000000000603082015281518082039093018352810190526105639061053d9061179a565b827e010100010000000000000000000000000000000000000000000000000000006108f6565b505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff16806105af573391505090565b919050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106105ea576105ea611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e657200000000000000000000000000000000000060308201528151808203909301835281019052610563906106569061179a565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006108da565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106106fb576106fb611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906107929061076a9061179a565b8360007e14010014000000000000000000000000000000000000000000000000000000610c11565b60601c949350505050565b606081601081901b60006107b083610c47565b9050827fffffffffffffffffffffffffffff00000000000000000000000000000000000083161561080b576108067fffffffffffffffffffffffffffff0000000000000000000000000000000000008416610c5e565b610842565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156108785761087383610c5e565b6108af565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016108c1939291906117c1565b6040516020818303038152906040529350505050919050565b6108ef85856108e98487610d10565b85610d53565b5050505050565b7f6f74000000000000000000000000000000000000000000000000000000000000837fffff000000000000000000000000000000000000000000000000000000000000160361097c57827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d078360405161096f919061188a565b60405180910390a2505050565b60006109878461100b565b905060005b8151811015610a645760008282815181106109a9576109a9611784565b602002602001015190506109d56040826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610a51576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf4590610a1e9089908990899060040161189d565b600060405180830381600087803b158015610a3857600080fd5b505af1158015610a4c573d6000803e3d6000fd5b505050505b5080610a5c816118dc565b91505061098c565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0784604051610a95919061188a565b60405180910390a26000610aa98585611109565b9050610b02816000610aba8661115f565b67ffffffffffffffff811115610ad257610ad261176e565b6040519080825280601f01601f191660200182016040528015610afc576020820181803683370190505b50611182565b6000610b0d84611198565b1115610b2e576000610b1f86866111d5565b9050610b2c81602061122b565b505b60005b8251811015610c09576000838281518110610b4e57610b4e611784565b60200260200101519050610b7a6080826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610bf6576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b90610bc3908a908a908a9060040161189d565b600060405180830381600087803b158015610bdd57600080fd5b505af1158015610bf1573d6000803e3d6000fd5b505050505b5080610c01816118dc565b915050610b31565b505050505050565b6000610c3e610c208686611109565b60ff858116601b0360080285901c16610c398587610d10565b611268565b95945050505050565b6000610c55607060106118f6565b9190911b919050565b606060005b6010811015610ccd577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff000000000000000000000000000000000000000000000000000000000000001615610ccd5780610cc5816118dc565b915050610c63565b604080517fffffffffffffffffffffffffffffffff000000000000000000000000000000008516602082015281516030909101909152818152805b949350505050565b600080805b8360ff16811015610d4b57610d3760ff601b83900360080287901c16836118f6565b915080610d43816118dc565b915050610d15565b509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610ddd57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610dd093929190611909565b60405180910390a261045d565b6000610de98585611109565b90506000610df68661100b565b905060005b8151811015610ed5576000828281518110610e1857610e18611784565b60200260200101519050610e446004826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610ec2576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610e8f908b908b908b908b90600401611946565b600060405180830381600087803b158015610ea957600080fd5b505af1158015610ebd573d6000803e3d6000fd5b505050505b5080610ecd816118dc565b915050610dfb565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610f0a93929190611909565b60405180910390a2610f25828565ffffffffffff1685611182565b60005b8151811015611002576000828281518110610f4557610f45611784565b60200260200101519050610f716008826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610fef576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610fbc908b908b908b908b90600401611946565b600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050505b5080610ffa816118dc565b915050610f28565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061104557611045611784565b60209081029190910181019190915260408051613a3160f11b818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015281518082039093018352810190526000906110d4906110cc9061179a565b8360006112b9565b9050610d086110e682600084516112f3565b611383565b60008160ff16826110fc8560581c90565b1660ff1614905092915050565b6000828260405160200161111e92919061198a565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b6000600861116f600260206119c5565b61117991906119d8565b9190911c919050565b610563838383516111938560200190565b61139b565b600060086001806111ab600260206119c5565b6111b591906119c5565b6111bf91906119c5565b6111c991906119d8565b8260ff911c1692915050565b600082826040516020016111ea92919061198a565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000602061123a83601f6118f6565b6112449190611a05565b61124e90846118f6565b90505b808310156105635760008355600183019250611251565b60006020821061128e5760208204840193506020828161128a5761128a6119ef565b0691505b508254600882021b602082900380841115610d4b576001850154600882021c82179150509392505050565b6060610d086112c985858561145b565b60006112ee856112d989896114db565b9060ff166028026038011c64ffffffffff1690565b6114ee565b6000818311158015611306575083518211155b611342578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161032a93929190611a27565b6020840161135084826118f6565b9050600061135e85856119c5565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006113948360156000611511565b9392505050565b821561141557602083106113c5576020830484019350602083816113c1576113c16119ef565b0692505b82156114155760208390036000600019600885021c1990506008850281811c91508351811c905081198754168282161787555081841161140657505061045d565b50600194909401939182900391015b5b602082106114375780518455600190930192601f1990910190602001611416565b811561045d576000600019600884021c198554835182169119161785555050505050565b6000838360405160200161147092919061198a565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006113946114ea84846111d5565b5490565b60405160208101601f19603f8484010116604052828252610d4b8585858461158c565b6060600061151f8560801c90565b90506fffffffffffffffffffffffffffffffff85166000858281611545576115456119ef565b04905060405193506020840160208202810160405281855260005b82811015611580578451871c825293870193602090910190600101611560565b50505050509392505050565b821561161557602083106115b6576020830484019350602083816115b2576115b26119ef565b0692505b82156116155760208390036000818410156115da5750600019600884021c196115e5565b50600019600882021c195b8554600886021b81198451168282161784525081841161160657505061045d565b50600194909401939182900391015b5b602082106116375783548152600190930192601f1990910190602001611616565b811561045d576000600019600884021c198251865482169119161782525050505050565b60006020828403121561166d57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461139457600080fd5b600080604083850312156116b057600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff811681146116db57600080fd5b809150509250929050565b60005b838110156117015781810151838201526020016116e9565b50506000910152565b600081518084526117228160208601602086016116e6565b601f01601f19169290920160200192915050565b604081526000611749604083018561170a565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b805160208083015191908110156117bb576000198160200360031b1b821691505b50919050565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516118228160038601602089016116e6565b8084019050816003820152845191506118428260048301602088016116e6565b0160040195945050505050565b600081518084526020808501945080840160005b8381101561187f57815187529582019590820190600101611863565b509495945050505050565b602081526000611394602083018461184f565b8381526060602082015260006118b6606083018561184f565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b600060001982036118ef576118ef6118c6565b5060010190565b808201808211156101c0576101c06118c6565b60608152600061191c606083018661184f565b65ffffffffffff85166020840152828103604084015261193c818561170a565b9695505050505050565b84815260806020820152600061195f608083018661184f565b65ffffffffffff85166040840152828103606084015261197f818561170a565b979650505050505050565b82815260006020808301845182860160005b828110156119b85781518452928401929084019060010161199c565b5091979650505050505050565b818103818111156101c0576101c06118c6565b80820281158282048414176101c0576101c06118c6565b634e487b7160e01b600052601260045260246000fd5b600082611a2257634e487b7160e01b600052601260045260246000fd5b500490565b606081526000611a3a606083018661170a565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b506118ac806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806345ec93541161005057806345ec9354146100e1578063c9c85a60146100f4578063e1af802c1461010757600080fd5b806301ffc9a714610077578063119df25f1461009f57806345afd199146100cc575b600080fd5b61008a610085366004611460565b61010f565b60405190151581526020015b60405180910390f35b6100a76101a8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100df6100da3660046114a2565b6101b7565b005b604051601f193601358152602001610096565b6100df6101023660046114f3565b6102ac565b6100a76103e7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101b26103f1565b905090565b6101c8836101c36101a8565b610423565b60006101d384610473565b90508082111561021e576040517f0e0e2d4d00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6102318461022c848461154e565b610563565b6000808473ffffffffffffffffffffffffffffffffffffffff168460405160006040518083038185875af1925050503d806000811461028c576040519150601f19603f3d011682016040523d82523d6000602084013e610291565b606091505b5091509150816102a4576102a48161066d565b505050505050565b7f6e73000000000000000000000000000000000000000000000000000000000000827fffff0000000000000000000000000000000000000000000000000000000000001614610355577f6e730000000000000000000000000000000000000000000000000000000000008261032084610675565b6040517f5c30fb6f000000000000000000000000000000000000000000000000000000008152600401610215939291906115b1565b61035e826107b2565b61036a836101c36101a8565b600061037584610473565b9050808211156103bb576040517f0e0e2d4d0000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401610215565b6103c98461022c848461154e565b6103e183836103d786610473565b61022c91906115f2565b50505050565b60006101b2610800565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806104205750335b90565b61042d828261084c565b61046f5761043a82610675565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610215929190611605565b5050565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106104ac576104ac61163d565b60209081029190910181019190915260408051613a3160f11b818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f42616c616e6365730000000000000000000000000000000000000000000000006030820152815180820390930183528101905260009061055b906105339061166c565b8360007e200100200000000000000000000000000000000000000000000000000000006108b1565b949350505050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106105995761059961163d565b60209081029190910181019190915260408051613a3160f11b818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015281518082039093018352810190526106689061061d9061166c565b8260008560405160200161063391815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006108e7565b505050565b805160208201fd5b606081601081901b600061068883610903565b9050827fffffffffffffffffffffffffffff0000000000000000000000000000000000008316156106e3576106de7fffffffffffffffffffffffffffff000000000000000000000000000000000000841661091a565b61071a565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156107505761074b8361091a565b610787565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b60405160200161079993929190611693565b6040516020818303038152906040529350505050919050565b6107bb816109c8565b6107fd57806107c982610675565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610215929190611721565b50565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610847573391505090565b919050565b600061089a7f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff0000000000000000000000000000000085161783610ac2565b806108aa57506108aa8383610ac2565b9392505050565b60006108de6108c08686610bb9565b60ff858116601b0360080285901c166108d98587610c0f565b610c52565b95945050505050565b6108fc85856108f68487610c0f565b85610ca3565b5050505050565b6000610911607060106115f2565b9190911b919050565b606060005b6010811015610989577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff00000000000000000000000000000000000000000000000000000000000000161561098957806109818161173a565b91505061091f565b604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166020820152815160309091019091528181528061055b565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110610a0157610a0161163d565b60209081029190910181019190915260408051613a3160f11b928101929092527f73746f726500000000000000000000000000000000000000000000000000000060228301527f5265736f757263654964730000000000000000000000000000000000000000006030830152600091610ab691015b604051602081830303815290604052610a8e9061166c565b8360007e010100010000000000000000000000000000000000000000000000000000006108b1565b905061055b8160f81c90565b604080516002808252606082018352600092839291906020830190803683370190505090508381600081518110610afb57610afb61163d565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b81600181518110610b3457610b3461163d565b60209081029190910181019190915260408051613a3160f11b928101929092527f776f726c6400000000000000000000000000000000000000000000000000000060228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152600091610bad9101610a76565b90506108de8160f81c90565b60008282604051602001610bce929190611754565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff16811015610c4a57610c3660ff601b83900360080287901c16836115f2565b915080610c428161173a565b915050610c14565b509392505050565b600060208210610c7857602082048401935060208281610c7457610c7461178f565b0691505b508254600882021b602082900380841115610c4a576001850154600882021c82179150509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610d2d57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610d20939291906117f9565b60405180910390a26103e1565b6000610d398585610bb9565b90506000610d4686610f5b565b905060005b8151811015610e25576000828281518110610d6857610d6861163d565b60200260200101519050610d946004826affffffffffffffffffffff191661103b90919063ffffffff16565b15610e12576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610ddf908b908b908b908b90600401611836565b600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050505b5080610e1d8161173a565b915050610d4b565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610e5a939291906117f9565b60405180910390a2610e75828565ffffffffffff1685611059565b60005b8151811015610f52576000828281518110610e9557610e9561163d565b60200260200101519050610ec16008826affffffffffffffffffffff191661103b90919063ffffffff16565b15610f3f576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610f0c908b908b908b908b90600401611836565b600060405180830381600087803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b505050505b5080610f4a8161173a565b915050610e78565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610f9557610f9561163d565b60209081029190910181019190915260408051613a3160f11b818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015281518082039093018352810190526000906110249061101c9061166c565b83600061106f565b905061055b61103682600084516110a9565b611139565b60008160ff168261104c8560581c90565b1660ff1614905092915050565b6106688383835161106a8560200190565b61114a565b606061055b61107f85858561120a565b60006110a48561108f898961128a565b9060ff166028026038011c64ffffffffff1690565b61129d565b60008183111580156110bc575083518211155b6110f8578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016102159392919061187a565b6020840161110684826115f2565b90506000611114858561154e565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006108aa83601560006112c0565b82156111c45760208310611174576020830484019350602083816111705761117061178f565b0692505b82156111c45760208390036000600019600885021c1990506008850281811c91508351811c90508119875416828216178755508184116111b55750506103e1565b50600194909401939182900391015b5b602082106111e65780518455600190930192601f19909101906020016111c5565b81156103e1576000600019600884021c198554835182169119161785555050505050565b6000838360405160200161121f929190611754565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006108aa611299848461133b565b5490565b60405160208101601f19603f8484010116604052828252610c4a85858584611391565b606060006112ce8560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816112f4576112f461178f565b04905060405193506020840160208202810160405281855260005b8281101561132f578451871c82529387019360209091019060010161130f565b50505050509392505050565b60008282604051602001611350929190611754565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b821561141a57602083106113bb576020830484019350602083816113b7576113b761178f565b0692505b821561141a5760208390036000818410156113df5750600019600884021c196113ea565b50600019600882021c195b8554600886021b81198451168282161784525081841161140b5750506103e1565b50600194909401939182900391015b5b6020821061143c5783548152600190930192601f199091019060200161141b565b81156103e1576000600019600884021c198251865482169119161782525050505050565b60006020828403121561147257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108aa57600080fd5b6000806000606084860312156114b757600080fd5b83359250602084013573ffffffffffffffffffffffffffffffffffffffff811681146114e257600080fd5b929592945050506040919091013590565b60008060006060848603121561150857600080fd5b505081359360208301359350604090920135919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156101a2576101a261151f565b60005b8381101561157c578181015183820152602001611564565b50506000910152565b6000815180845261159d816020860160208601611561565b601f01601f19169290920160200192915050565b7fffff000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006108de6060830184611585565b808201808211156101a2576101a261151f565b6040815260006116186040830185611585565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051602080830151919081101561168d576000198160200360031b1b821691505b50919050565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516116f4816003860160208901611561565b808401905081600382015284519150611714826004830160208801611561565b0160040195945050505050565b82815260406020820152600061055b6040830184611585565b6000600019820361174d5761174d61151f565b5060010190565b82815260006020808301845182860160005b8281101561178257815184529284019290840190600101611766565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081518084526020808501945080840160005b838110156117ee578151875295820195908201906001016117d2565b509495945050505050565b60608152600061180c60608301866117be565b65ffffffffffff85166020840152828103604084015261182c8185611585565b9695505050505050565b84815260806020820152600061184f60808301866117be565b65ffffffffffff85166040840152828103606084015261186f8185611585565b979650505050505050565b60608152600061188d6060830186611585565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b50610af5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638fc8cf7e116100505780638fc8cf7e146100df578063ce5e8dd9146100ff578063e1af802c1461011257600080fd5b806301ffc9a714610077578063119df25f1461009f57806345ec9354146100cc575b600080fd5b61008a61008536600461063e565b61011a565b60405190151581526020015b60405180910390f35b6100a76101b3565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b604051601f193601358152602001610096565b6100f26100ed3660046106d3565b6101c2565b6040516100969190610739565b6100f261010d3660046106d3565b6103d7565b6100a76105ae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101ad57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101bd6105b8565b905090565b606060006101ce6105ae565b90508267ffffffffffffffff8111156101e9576101e96107d1565b60405190808252806020026020018201604052801561021c57816020015b60608152602001906001900390816102075790505b50915060005b838110156103cf5760008073ffffffffffffffffffffffffffffffffffffffff84168063894ecc5889898781811061025c5761025c610800565b905060200281019061026e919061082f565b61027c90602081019061086d565b8a8a8881811061028e5761028e610800565b90506020028101906102a0919061082f565b602001358b8b898181106102b6576102b6610800565b90506020028101906102c8919061082f565b6102d69060408101906108a3565b6040516024016102e99493929190610933565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516103369250610973565b600060405180830381855af49150503d8060008114610371576040519150601f19603f3d011682016040523d82523d6000602084013e610376565b606091505b50915091508161038957610389816105ea565b8080602001905181019061039d9190610985565b8584815181106103af576103af610800565b6020026020010181905250505080806103c790610a32565b915050610222565b505092915050565b606060006103e36105ae565b90508267ffffffffffffffff8111156103fe576103fe6107d1565b60405190808252806020026020018201604052801561043157816020015b606081526020019060019003908161041c5790505b50915060005b838110156103cf5760008073ffffffffffffffffffffffffffffffffffffffff841680633ae7af0889898781811061047157610471610800565b90506020028101906104839190610a91565b358a8a8881811061049657610496610800565b90506020028101906104a89190610a91565b6104b69060208101906108a3565b6040516024016104c893929190610ac5565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516105159250610973565b600060405180830381855af49150503d8060008114610550576040519150601f19603f3d011682016040523d82523d6000602084013e610555565b606091505b50915091508161056857610568816105ea565b8080602001905181019061057c9190610985565b85848151811061058e5761058e610800565b6020026020010181905250505080806105a690610a32565b915050610437565b60006101bd6105f2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806105e75750335b90565b805160208201fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610639573391505090565b919050565b60006020828403121561065057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461068057600080fd5b9392505050565b60008083601f84011261069957600080fd5b50813567ffffffffffffffff8111156106b157600080fd5b6020830191508360208260051b85010111156106cc57600080fd5b9250929050565b600080602083850312156106e657600080fd5b823567ffffffffffffffff8111156106fd57600080fd5b61070985828601610687565b90969095509350505050565b60005b83811015610730578181015183820152602001610718565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156107c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526107a5818989018a8501610715565b601f01601f191695909501860194509285019290850190600101610760565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261086357600080fd5b9190910192915050565b60006020828403121561087f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461068057600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126108d857600080fd5b83018035915067ffffffffffffffff8211156108f357600080fd5b6020019150368190038213156106cc57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610969606083018486610908565b9695505050505050565b60008251610863818460208701610715565b60006020828403121561099757600080fd5b815167ffffffffffffffff808211156109af57600080fd5b818401915084601f8301126109c357600080fd5b8151818111156109d5576109d56107d1565b604051601f8201601f19908116603f011681019083821181831017156109fd576109fd6107d1565b81604052828152876020848701011115610a1657600080fd5b610a27836020830160208801610715565b979650505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261086357600080fd5b838152604060208201526000610adf604083018486610908565b9594505050505056fea164736f6c6343000815000a608060405234801561001057600080fd5b5061565b80620000216000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063530f4b6011610097578063b29e408911610066578063b29e408914610226578063bfdfaff714610239578063d5f8337f1461024c578063e1af802c1461025f57600080fd5b8063530f4b60146101da578063742d6118146101ed5780638da798da14610200578063a92813ad1461021357600080fd5b80631d2257ba116100d35780631d2257ba1461017557806326d98102146101885780633350b6a9146101b457806345ec9354146101c757600080fd5b806301ffc9a714610105578063056091291461012d5780630ba51f4914610142578063119df25f14610155575b600080fd5b610118610113366004614aa7565b610267565b60405190151581526020015b60405180910390f35b61014061013b366004614ad7565b6102d0565b005b610140610150366004614b53565b6102ef565b61015d6103bf565b6040516001600160a01b039091168152602001610124565b610140610183366004614ca0565b6103ce565b61019b610196366004614cf9565b61044e565b6040516001600160e01b03199091168152602001610124565b6101406101c2366004614d40565b610546565b604051601f193601358152602001610124565b6101406101e8366004614d98565b610731565b61019b6101fb366004614dd6565b610772565b61014061020e366004614e24565b61082d565b610140610221366004614ad7565b610946565b610140610234366004614e5e565b6109ba565b610140610247366004614e77565b610a5e565b61014061025a366004614d98565b610b28565b61015d610b8f565b60006001600160e01b031982167fb5dee1270000000000000000000000000000000000000000000000000000000014806102ca57506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6102e1826102dc6103bf565b610b99565b6102eb8282610c1f565b5050565b60006102fa89610c6c565b6fffffffffffffffffffffffffffffffff191603610359578761031c89610c83565b6040517fe4ac069e000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b60405180910390fd5b610389616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008a1617610d97565b610395886102dc6103bf565b6103b5888888886103a6888a614f1a565b6103b08789614f1a565b610de2565b5050505050505050565b60006103c9611082565b905090565b6103e06103d96103bf565b84846110b4565b6103e9826111de565b80156103f6575060008151115b15610449576000610406836111fa565b9050610432817faf585477000000000000000000000000000000000000000000000000000000006112d5565b61044661043d6103bf565b84846000611330565b50505b505050565b600061045c836102dc6103bf565b600061048561046b8560101b90565b71ffffffffffffffffffffffffffffffffffff191661135d565b9050600061049a61049586610c6c565b61135d565b905060008282866040516020016104b393929190614f9e565b60405160208183030381529060405290508080519060200120935060006104d9856113f1565b9050801561051f576040517f3d1d1ae20000000000000000000000000000000000000000000000000000000081526001600160e01b031986166004820152602401610350565b855160208701206105318689836114e0565b61053b86846115e8565b505050505092915050565b7f7379000000000000000000000000000000000000000000000000000000000000836001600160f01b031916146105d7577f7379000000000000000000000000000000000000000000000000000000000000836105a285610c83565b6040517f5c30fb6f00000000000000000000000000000000000000000000000000000000815260040161035093929190615014565b7dffffffffffffffffffffffffffff000000000000000000000000000000008316616e7360f01b1761060881610d97565b610614816102dc6103bf565b61063e837fb5dee127000000000000000000000000000000000000000000000000000000006112d5565b600061064985610c6c565b6fffffffffffffffffffffffffffffffff19160361066b578361031c85610c83565b6000610676846116ee565b905080158015906106875750848114155b156106c9576040517fc0b707410000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610350565b60006106d4866111fa565b90506001600160a01b038116156106fd576106ee816117d0565b6106f883826118a4565b610708565b610708866001611997565b610713868686611a8f565b61071d8587611b6f565b61072983866001611c0f565b505050505050565b61075b827f1873396a000000000000000000000000000000000000000000000000000000006112d5565b610767836102dc6103bf565b610449838383611cce565b60408051616e7360f01b602082015260006022820181905260308201819052916107b791016040516020818303038152906040526107af9061503d565b6102dc6103bf565b508151602083012060006107ca826113f1565b90508015610810576040517f3d1d1ae20000000000000000000000000000000000000000000000000000000081526001600160e01b031983166004820152602401610350565b61081b8286856114e0565b61082582856115e8565b509392505050565b610857827f780ac2fc000000000000000000000000000000000000000000000000000000006112d5565b6108d36108626103bf565b600084846040516024016108769190615061565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f13861fb500000000000000000000000000000000000000000000000000000000179052611d2f565b506102eb826001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109399190615074565b8251602084012084611d40565b610952826102dc6103bf565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d486f6f6b7300000000000000000000000000000000000000000060308201526102eb91015b6040516020818303038152906040526109b39061503d565b8383611e73565b616e7360f01b816001600160f01b031916146109e057616e7360f01b816105a283610c83565b6109e981611f9a565b15610a2c57806109f882610c83565b6040517f0dc28f6a000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b610a37816001611997565b610a4881610a436103bf565b61207c565b610a5b81610a546103bf565b6001611c0f565b50565b616e7360f01b836001600160f01b03191614610a8457616e7360f01b836105a285610c83565b610a8d826111de565b610ac3576040517f71ee9e8100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610acf836102dc6103bf565b6000610ada836111fa565b9050610b06817faf585477000000000000000000000000000000000000000000000000000000006112d5565b610b108484612110565b815115610b225761044661043d6103bf565b50505050565b610b52827f540fbfa8000000000000000000000000000000000000000000000000000000006112d5565b610b5e836102dc6103bf565b610449836bffffffffffffffffffffffff19606085901b166bff0000000000000000000000605885901b16176121a4565b60006103c9612293565b6001600160a01b038116610bd3616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008516176122d2565b6001600160a01b0316146102eb57610bea82610c83565b816040517fd787b7370000000000000000000000000000000000000000000000000000000081526004016103509291906150a7565b60408051613a3160f11b60208201526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201526102eb910161099b565b6000610c7a607060106150e8565b9190911b919050565b606081601081901b6000610c9683610c6c565b90508271ffffffffffffffffffffffffffffffffffff19831615610cd757610cd271ffffffffffffffffffffffffffffffffffff19841661135d565b610d0e565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6fffffffffffffffffffffffffffffffff19831615610d3557610d308361135d565b610d6c565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b604051602001610d7e939291906150fb565b6040516020818303038152906040529350505050919050565b610da081611f9a565b610a5b5780610dae82610c83565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b613a3160f11b866001600160f01b03191614801590610e105750611bdd60f21b866001600160f01b03191614155b15610e7157613a3160f11b8687604051602001610e2f91815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252610350939291600401615014565b610e7a856123a2565b610e85846001612523565b610e90836000612523565b60e084901c60e885901c0160ff16825114610ef05760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b60e085901c60e886901c0160ff16815114610f505760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff1614610fc85760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b610fd186611f9a565b1561102b578586604051602001610fea91815260200190565b60408051601f19818403018152908290527fdfaaf9cf0000000000000000000000000000000000000000000000000000000082526103509291600401614f01565b61107786868686866040516020016110439190615171565b604051602081830303815290604052866040516020016110639190615171565b6040516020818303038152906040526126cf565b610729866001611997565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806110b15750335b90565b604080516002808252606082018352600092602083019080368337019050509050836001600160a01b031660001b816000815181106110f5576110f56151f1565b602002602001018181525050826001600160a01b031660001b81600181518110611121576111216151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5573657244656c65676174696f6e436f000000000000000000000000000000006030830152610b2291015b6040516020818303038152906040526111939061503d565b826000856040516020016111a991815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006127d3565b600081151580156102ca57506111f3826127e8565b1592915050565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611233576112336151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000906112ca906112a29061503d565b8360007e15020014010000000000000000000000000000000000000000000000000000612863565b60601c949350505050565b6112df8282612899565b6102eb576040517f74b5e6ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526001600160e01b031982166024820152604401610350565b6060600080611341878787876128bc565b91509150816113535761135381612aa0565b9695505050505050565b606060005b60108110156113bd576fffffffffffffffffffffffffffffffff198316600882021b7fff0000000000000000000000000000000000000000000000000000000000000016156113bd57806113b581615207565b915050611362565b604080516fffffffffffffffffffffffffffffffff198516602082015281516030909101909152818152805b949350505050565b60408051600180825281830190925260009182919060208083019080368337019050509050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681600081518110611449576114496151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015281518082039093018352810190526000906113e9906114b89061503d565b8360007e24020020040000000000000000000000000000000000000000000000000000612863565b60006114ec8383612aa8565b60408051600180825281830190925291925060009160609183919060208083019080368337019050509050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061154a5761154a6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015281518082039093018352810190526115df906115b69061503d565b828686867e24020020040000000000000000000000000000000000000000000000000000612ae7565b50505050505050565b606060006115f583612e01565b9050600061160284612e11565b6040805160018082528183019092529192506000919060208083019080368337019050509050857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061165b5761165b6151f1565b60209081029190910181019190915260408051611bdd60f21b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e5369676e617475720000000000000000000000000000000060308201528151808203909301835281019052610729906116c79061503d565b828686867c0100000000000000000000000000000000000000000000000000000000612ae7565b60408051600180825281830190925260009182919060208083019080368337019050509050826001600160a01b031660001b81600081518110611733576117336151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d526567697374727900000000000000000000000000000000000060308301526000916113e991015b6040516020818303038152906040526117a89061503d565b8360007e20010020000000000000000000000000000000000000000000000000000000612863565b60408051600180825281830190925260009160208083019080368337019050509050816001600160a01b031660001b81600081518110611812576118126151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d5265676973747279000000000000000000000000000000000000603082015281518082039093018352810190526102eb9061187e9061503d565b827e20010020000000000000000000000000000000000000000000000000000000612e3a565b60408051600280825260608201835260009260208301908036833701905050905082816000815181106118d9576118d96151f1565b602002602001018181525050816001600160a01b031660001b81600181518110611905576119056151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f7572636541636365737300000000000000000000000000000000000060308201528151808203909301835281019052610449906119719061503d565b827e01010001000000000000000000000000000000000000000000000000000000612e3a565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106119cd576119cd6151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015261044991015b604051602081830303815290604052611a3f9061503d565b82600085604051602001611a5a91151560f81b815260010190565b60408051601f198184030181529190527e010100010000000000000000000000000000000000000000000000000000006127d3565b6000611a9b838361311a565b604080516001808252818301909252919250600091606091839190602080830190803683370190505090508681600081518110611ada57611ada6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526115df90611b469061503d565b828686867e15020014010000000000000000000000000000000000000000000000000000612ae7565b60408051600180825281830190925260009160208083019080368337019050509050826001600160a01b031660001b81600081518110611bb157611bb16151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d52656769737472790000000000000000000000000000000000006030830152610449910161117b565b6040805160028082526060820183526000926020830190803683370190505090508381600081518110611c4457611c446151f1565b602002602001018181525050826001600160a01b031660001b81600181518110611c7057611c706151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152610b229101611a27565b613a3160f11b836001600160f01b03191614611cfe57613a3160f11b8384604051602001610e2f91815260200190565b610449836bffffffffffffffffffffffff19606085901b166bff0000000000000000000000605885901b161761314a565b6060600080611341878787876131de565b604080516002808252606082018352600092602083019080368337019050509050836fffffffffffffffffffffffffffffffff191681600081518110611d8857611d886151f1565b6020026020010181815250508281600181518110611da857611da86151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f496e7374616c6c65644d6f64756c6573000000000000000000000000000000006030830152610b2291015b604051602081830303815290604052611e1a9061503d565b6040516bffffffffffffffffffffffff19606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006127d3565b6000611e7f8484613256565b90506000815167ffffffffffffffff811115611e9d57611e9d614be9565b604051908082528060200260200182016040528015611ec6578160200160208202803683370190505b5090506000805b8351811015611f8b57846001600160a01b0316611f11858381518110611ef557611ef56151f1565b60200260200101516affffffffffffffffffffff191660601c90565b6001600160a01b031614611f8357838181518110611f3157611f316151f1565b6020026020010151838381518110611f4b57611f4b6151f1565b7fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000909216602092830291909101909101526001909101905b600101611ecd565b508082526107298686846132c1565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611fd357611fd36151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015260009161207091015b6040516020818303038152906040526120489061503d565b8360007e01010001000000000000000000000000000000000000000000000000000000612863565b90506113e98160f81c90565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106120b2576120b26151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d6573706163654f776e657200000000000000000000000000000000000060308301526104499101611e02565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110612146576121466151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d65737061636544656c65676174000000000000000000000000000000006030830152610449910161117b565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106121da576121da6151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b73000000000000000000000000000000000000000000603083015261044991015b60405160208183030381529060405261224c9061503d565b6040517fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000851660208201528390600090603501604051602081830303815290604052613318565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e175546000906001600160a01b0316806122cd573391505090565b919050565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061230b5761230b6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906112ca9061237a9061503d565b8360007e14010014000000000000000000000000000000000000000000000000000000612863565b806123d9576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006123e4826133c9565b9050600581111561242b576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401610350565b600061243683613406565b9050600061244483836150e8565b9050601c81111561248b576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401610350565b60005b828110156104465760ff601b82900360080286901c1660008190036124df576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081111561251a576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060010161248e565b8015801561252f575081155b1561255057604051635318beb960e01b815260006004820152602401610350565b600061255b836133c9565b9050600581111561258257604051635318beb960e01b815260048101829052602401610350565b600061258d84613406565b9050600061259b83836150e8565b9050601c8111156125c257604051635318beb960e01b815260048101829052602401610350565b60008060005b838110156126885760006125f56125df8a84613418565b60c58111156125f0576125f0615221565b613439565b111561263f57848110612634576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600190920191612680565b84811015612679576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b6001016125c8565b508382146126ac57604051635318beb960e01b815260048101839052602401610350565b8481146115df57604051635318beb960e01b815260048101829052602401610350565b60006126dc868686613499565b905060006126ea84846134cf565b905060006126f885856134ec565b60408051600180825281830190925291925060009190602080830190803683370190505090508981600081518110612732576127326151f1565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526127c79061279e9061503d565b828686867e60030220202000000000000000000000000000000000000000000000000000612ae7565b50505050505050505050565b61044685856127e28487613501565b8561353c565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201526000602282018190527f756e6c696d6974656400000000000000000000000000000000000000000000006030830152910160405160208183030381529060405261285b9061503d565b909114919050565b600061289061287286866137b8565b60ff858116601b0360080285901c1661288b8587613501565b61380e565b95945050505050565b60006128a48361385f565b80156128b557506128b583836138a0565b9392505050565b6000606060006128cb86613958565b905060005b81518110156129a85760008282815181106128ed576128ed6151f1565b602002602001015190506129196001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612995576040517fc3323031000000000000000000000000000000000000000000000000000000008152606082901c9063c332303190612962908c908c908c90600401615237565b600060405180830381600087803b15801561297c57600080fd5b505af1158015612990573d6000803e3d6000fd5b505050505b50806129a081615207565b9150506128d0565b506129b587858888613a3f565b909350915060005b8151811015612a955760008282815181106129da576129da6151f1565b60200260200101519050612a066002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612a82576040517f973d8f99000000000000000000000000000000000000000000000000000000008152606082901c9063973d8f9990612a4f908c908c908c90600401615237565b600060405180830381600087803b158015612a6957600080fd5b505af1158015612a7d573d6000803e3d6000fd5b505050505b5080612a8d81615207565b9150506129bd565b505094509492505050565b805160208201fd5b60608282604051602001612ad09291909182526001600160e01b031916602082015260240190565b604051602081830303815290604052905092915050565b611bdd60f21b866001600160f01b03191603612b4057857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a986868686604051612b33949392919061529a565b60405180910390a2610729565b6000612b4b87613b1e565b905060005b8151811015612c2e576000828281518110612b6d57612b6d6151f1565b60200260200101519050612b996001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612c1b576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90612be8908c908c908c908c908c908c906004016152d9565b600060405180830381600087803b158015612c0257600080fd5b505af1158015612c16573d6000803e3d6000fd5b505050505b5080612c2681615207565b915050612b50565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051612c65949392919061529a565b60405180910390a26000612c7988886137b8565b90506000602087019050612c91826000895184613bb9565b6000612c9c856133c9565b1115612d20576000612cae8a8a613c79565b878155905060208601915060008060005b612cc8886133c9565b8160ff161015612d1b57612cdd8d8d83613ccf565b9250612cf88a8260ff166028026038011c64ffffffffff1690565b9150612d078360008488613bb9565b612d1182866150e8565b9450600101612cbf565b505050505b60005b83518110156127c7576000848281518110612d4057612d406151f1565b60200260200101519050612d6c6002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612dee576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90612dbb908e908e908e908e908e908e906004016152d9565b600060405180830381600087803b158015612dd557600080fd5b505af1158015612de9573d6000803e3d6000fd5b505050505b5080612df981615207565b915050612d23565b60006102ca8251603881901b1790565b606081604051602001612e249190615332565b6040516020818303038152906040529050919050565b611bdd60f21b836001600160f01b03191603612e8d57827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0783604051612e80919061534e565b60405180910390a2505050565b6000612e9884613b1e565b905060005b8151811015612f75576000828281518110612eba57612eba6151f1565b60200260200101519050612ee66040826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612f62576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf4590612f2f90899089908990600401615361565b600060405180830381600087803b158015612f4957600080fd5b505af1158015612f5d573d6000803e3d6000fd5b505050505b5080612f6d81615207565b915050612e9d565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0784604051612fa6919061534e565b60405180910390a26000612fba85856137b8565b9050613013816000612fcb86613d4f565b67ffffffffffffffff811115612fe357612fe3614be9565b6040519080825280601f01601f19166020018201604052801561300d576020820181803683370190505b50613d72565b600061301e846133c9565b111561303f5760006130308686613c79565b905061303d816020613d88565b505b60005b825181101561072957600083828151811061305f5761305f6151f1565b6020026020010151905061308b6080826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613107576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b906130d4908a908a908a90600401615361565b600060405180830381600087803b1580156130ee57600080fd5b505af1158015613102573d6000803e3d6000fd5b505050505b508061311281615207565b915050613042565b604051606083811b6bffffffffffffffffffffffff1916602083015282151560f81b603483015290603501612ad0565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110613180576131806151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308301526104499101612234565b60006060836001600160a01b031660006131f9858989613dc5565b6040516132069190615332565b60006040518083038185875af1925050503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b606091505b509097909650945050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613290576132906151f1565b60200260200101818152505060006132aa85836000613ddc565b90506128906132bc8260008451613e16565b613ea6565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106132f7576132f76151f1565b602002602001018181525050610b228482600061331386613eb7565b613ec7565b6000613322612293565b9050306001600160a01b038216036133455761334085858585613f02565b610446565b6040517f150f32620000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063150f32629061339090889088908890889060040161538a565b600060405180830381600087803b1580156133aa57600080fd5b505af11580156133be573d6000803e3d6000fd5b505050505050505050565b600060086001806133dc600260206153be565b6133e691906153be565b6133f091906153be565b6133fa91906153d1565b8260ff911c1692915050565b6000600860016133e6600260206153be565b6000601b8290036008028360ff911c1660c58111156128b5576128b5615221565b6000808260c581111561344e5761344e615221565b60ff169050606181101561346857601f1660010192915050565b60618360c581111561347c5761347c615221565b0361348a5750601492915050565b50600092915050565b50919050565b60408051602081018590529081018390526060818101839052906080015b60405160208183030381529060405290509392505050565b8151815160009181810160389190911b1760609190911b176128b5565b60608282604051602001612ad09291906153e8565b600080805b8360ff168110156108255761352860ff601b83900360080287901c16836150e8565b91508061353481615207565b915050613506565b611bdd60f21b846001600160f01b0319160361359357837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161358693929190615417565b60405180910390a2610b22565b600061359f85856137b8565b905060006135ac86613b1e565b905060005b815181101561368b5760008282815181106135ce576135ce6151f1565b602002602001015190506135fa6004826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613678576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90613645908b908b908b908b9060040161544a565b600060405180830381600087803b15801561365f57600080fd5b505af1158015613673573d6000803e3d6000fd5b505050505b508061368381615207565b9150506135b1565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8686866040516136c093929190615417565b60405180910390a26136db828565ffffffffffff1685613d72565b60005b81518110156115df5760008282815181106136fb576136fb6151f1565b602002602001015190506137276008826affffffffffffffffffffff1916613a2190919063ffffffff16565b156137a5576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190613772908b908b908b908b9060040161544a565b600060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050505b50806137b081615207565b9150506136de565b600082826040516020016137cd929190615483565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b60006020821061383457602082048401935060208281613830576138306154be565b0691505b508254600882021b602082900380841115610825576001850154600882021c82179150509392505050565b600061388b827f01ffc9a7000000000000000000000000000000000000000000000000000000006138a0565b80156102ca57506111f3826001600160e01b03195b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613941575060208210155b801561394d5750600081115b979650505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613992576139926151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b730000000000000000000000000000000000000000006030830152600091613a0f91015b604051602081830303815290604052613a079061503d565b836000613ddc565b90506113e96132bc8260008451613e16565b60008160ff1682613a328560581c90565b1660ff1614905092915050565b60006060600080613a4f86613f3d565b90925090506001600160a01b038216613a6c5785610dae87610c83565b80613a7b57613a7b8689614035565b8615613acc577dffffffffffffffffffffffffffff000000000000000000000000000000008616616e7360f01b176000613ab48261404c565b9050613ac982613ac48b846150e8565b6140e6565b50505b6000613ad88760101b90565b71ffffffffffffffffffffffffffffffffffff191614613b0357613afe888884886131de565b613b0f565b613b0f8888848861417a565b90999098509650505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613b5857613b586151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b73000000000000000000000000000000000000000000006030830152600091613a0f91016139ef565b8215613c335760208310613be357602083048401935060208381613bdf57613bdf6154be565b0692505b8215613c335760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411613c24575050610b22565b50600194909401939182900391015b5b60208210613c555780518455600190930192601f1990910190602001613c34565b8115610b22576000600019600884021c198554835182169119161785555050505050565b60008282604051602001613c8e929190615483565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b60008383604051602001613ce4929190615483565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006008613d5f600260206153be565b613d6991906153d1565b9190911c919050565b61044983838351613d838560200190565b613bb9565b60006020613d9783601f6150e8565b613da191906154d4565b613dab90846150e8565b90505b808310156104495760008355600183019250613dae565b60608383836040516020016134b7939291906154f6565b60606113e9613dec858585613ccf565b6000613e1185613dfc89896141db565b9060ff166028026038011c64ffffffffff1690565b6141ee565b6000818311158015613e29575083518211155b613e65578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161035093929190615535565b60208401613e7384826150e8565b90506000613e8185856153be565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006128b58360156000614211565b6060816128b5816015600061428c565b6000613ed385856141db565b90506000613ef0828560ff166028026038011c64ffffffffff1690565b905061072986868660008588886142e0565b6000613f0e85856141db565b90506000613f2b828560ff166028026038011c64ffffffffff1690565b905061072986868684600088886142e0565b60408051600180825281830190925260009182918291602080830190803683370190505090508381600081518110613f7757613f776151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000908190819061401090613fea9061503d565b857e1502001401000000000000000000000000000000000000000000000000000061469c565b5050602081015160349091015160609190911c9860f89190911c975095505050505050565b61403f82826147a4565b6102eb57610bea82610c83565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110614085576140856151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e63657300000000000000000000000000000000000000000000000060308301526000916113e99101611790565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061411c5761411c6151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e6365730000000000000000000000000000000000000000000000006030830152610449910161117b565b60006060836001600160a01b0316614193848888613dc5565b6040516141a09190615332565b600060405180830381855af49150503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b60006128b56141ea8484613c79565b5490565b60405160208101601f19603f8484010116604052828252610825858585846147e7565b6060600061421f8560801c90565b90506fffffffffffffffffffffffffffffffff85166000858281614245576142456154be565b04905060405193506020840160208202810160405281855260005b82811015614280578451871c825293870193602090910190600101614260565b50505050509392505050565b8251606090600061429d85836153d1565b9050604051925060208301601f19603f83860101166040528184526000602088015b84821015614280578051871b835291870191600191909101906020016142bf565b613a3160f11b876001600160f01b0319161461431057613a3160f11b8788604051602001610e2f91815260200190565b600061432b828760ff166028026038011c64ffffffffff1690565b9050600083518564ffffffffff168361434491906153be565b61434e91906150e8565b9050808214158015614370575081614366868861555a565b64ffffffffff1614155b156143c0576040517fa65010b400000000000000000000000000000000000000000000000000000000815264ffffffffff8088166004830152808716602483015283166044820152606401610350565b818664ffffffffff161115614411576040517f7e8578d30000000000000000000000000000000000000000000000000000000081526004810183905264ffffffffff87166024820152604401610350565b600061441e8489846148b6565b9050600061442b8b613b1e565b905060005b815181101561450057600082828151811061444d5761444d6151f1565b602002602001015190506144796010826affffffffffffffffffffff1916613a2190919063ffffffff16565b156144ed57606081901c6001600160a01b03166355eb5a288e8e8e8e8e8d8f6040518863ffffffff1660e01b81526004016144ba979695949392919061557f565b600060405180830381600087803b1580156144d457600080fd5b505af11580156144e8573d6000803e3d6000fd5b505050505b50806144f881615207565b915050614430565b5064ffffffffff881660005b8a60ff168160ff16101561453f57614533878260ff166028026038011c64ffffffffff1690565b9091019060010161450c565b508b7faa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b48c838b878c6040516145789594939291906155dd565b60405180910390a2508284146145995760006145948c8c613c79565b839055505b60006145a68c8c8c613ccf565b90506145ba818a64ffffffffff1689613d72565b5060005b815181101561468e5760008282815181106145db576145db6151f1565b602002602001015190506146076020826affffffffffffffffffffff1916613a2190919063ffffffff16565b1561467b57606081901c6001600160a01b031663635845338e8e8e8e8e8a8f6040518863ffffffff1660e01b8152600401614648979695949392919061557f565b600060405180830381600087803b15801561466257600080fd5b505af1158015614676573d6000803e3d6000fd5b505050505b508061468681615207565b9150506145be565b505050505050505050505050565b60606000606060006146ad85613d4f565b90506146ba878783614984565b935060006146c7866133c9565b90508015614799576146d988886141db565b935066ffffffffffffff841667ffffffffffffffff8111156146fd576146fd614be9565b6040519080825280601f01601f191660200182016040528015614727576020820181803683370190505b5092506020830160005b828160ff1610156147965760006147498b8b84613ccf565b90506000614766888460ff166028026038011c64ffffffffff1690565b905061477582600083876147e7565b61477f81856150e8565b93505050808061478e9061562f565b915050614731565b50505b505093509350939050565b60006147d7616e7360f01b7dffffffffffffffffffffffffffff00000000000000000000000000000000851617836149bd565b806128b557506128b583836149bd565b821561487057602083106148115760208304840193506020838161480d5761480d6154be565b0692505b82156148705760208390036000818410156148355750600019600884021c19614840565b50600019600882021c195b8554600886021b811984511682821617845250818411614861575050610b22565b50600194909401939182900391015b5b602082106148925783548152600190930192601f1990910190602001614871565b8115610b22576000600019600884021c198251865482169119161782525050505050565b600064ffffffffff8211156148fa576040517f4767058800000000000000000000000000000000000000000000000000000000815260048101839052602401610350565b8366ffffffffffffff811660ff851660280260380182901c64ffffffffff1680851061492c5780850382019150614934565b848103820391505b5064ffffffffff6038602860ff8816020181811b197fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009490941690921792909216918416901b1790509392505050565b6060816000036149a357506040805160208101909152600081526128b5565b60006149af85856137b8565b9050612890816000856141ee565b6040805160028082526060820183526000928392919060208301908036833701905050905083816000815181106149f6576149f66151f1565b602002602001018181525050826001600160a01b031660001b81600181518110614a2257614a226151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152600091614a839101612030565b90506128908160f81c90565b80356001600160e01b0319811681146122cd57600080fd5b600060208284031215614ab957600080fd5b6128b582614a8f565b6001600160a01b0381168114610a5b57600080fd5b60008060408385031215614aea57600080fd5b823591506020830135614afc81614ac2565b809150509250929050565b60008083601f840112614b1957600080fd5b50813567ffffffffffffffff811115614b3157600080fd5b6020830191508360208260051b8501011115614b4c57600080fd5b9250929050565b60008060008060008060008060c0898b031215614b6f57600080fd5b88359750602089013596506040890135955060608901359450608089013567ffffffffffffffff80821115614ba357600080fd5b614baf8c838d01614b07565b909650945060a08b0135915080821115614bc857600080fd5b50614bd58b828c01614b07565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614c2857614c28614be9565b604052919050565b600082601f830112614c4157600080fd5b813567ffffffffffffffff811115614c5b57614c5b614be9565b614c6e6020601f19601f84011601614bff565b818152846020838601011115614c8357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215614cb557600080fd5b8335614cc081614ac2565b925060208401359150604084013567ffffffffffffffff811115614ce357600080fd5b614cef86828701614c30565b9150509250925092565b60008060408385031215614d0c57600080fd5b82359150602083013567ffffffffffffffff811115614d2a57600080fd5b614d3685828601614c30565b9150509250929050565b600080600060608486031215614d5557600080fd5b833592506020840135614d6781614ac2565b915060408401358015158114614d7c57600080fd5b809150509250925092565b803560ff811681146122cd57600080fd5b600080600060608486031215614dad57600080fd5b833592506020840135614dbf81614ac2565b9150614dcd60408501614d87565b90509250925092565b600080600060608486031215614deb57600080fd5b83359250602084013567ffffffffffffffff811115614e0957600080fd5b614e1586828701614c30565b925050614dcd60408501614a8f565b60008060408385031215614e3757600080fd5b8235614e4281614ac2565b9150602083013567ffffffffffffffff811115614d2a57600080fd5b600060208284031215614e7057600080fd5b5035919050565b600080600060608486031215614e8c57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614ce357600080fd5b60005b83811015614ecc578181015183820152602001614eb4565b50506000910152565b60008151808452614eed816020860160208601614eb1565b601f01601f19169290920160200192915050565b8281526040602082015260006113e96040830184614ed5565b600067ffffffffffffffff80841115614f3557614f35614be9565b8360051b6020614f46818301614bff565b868152918501918181019036841115614f5e57600080fd5b865b84811015614f9257803586811115614f785760008081fd5b614f8436828b01614c30565b845250918301918301614f60565b50979650505050505050565b60008451614fb0818460208901614eb1565b80830190507f5f000000000000000000000000000000000000000000000000000000000000008082528551614fec816001850160208a01614eb1565b60019201918201528351615007816002840160208801614eb1565b0160020195945050505050565b6001600160f01b0319841681528260208201526060604082015260006128906060830184614ed5565b805160208083015191908110156134935760001960209190910360031b1b16919050565b6020815260006128b56020830184614ed5565b60006020828403121561508657600080fd5b81516fffffffffffffffffffffffffffffffff19811681146128b557600080fd5b6040815260006150ba6040830185614ed5565b90506001600160a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102ca576102ca6150d2565b6001600160f01b03198416815260007f3a000000000000000000000000000000000000000000000000000000000000008060028401528451615144816003860160208901614eb1565b808401905081600382015284519150615164826004830160208801614eb1565b0160040195945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156151e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526151d2858351614ed5565b94509285019290850190600101615198565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600019820361521a5761521a6150d2565b5060010190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03841681528260208201526060604082015260006128906060830184614ed5565b600081518084526020808501945080840160005b8381101561528f57815187529582019590820190600101615273565b509495945050505050565b6080815260006152ad608083018761525f565b82810360208401526152bf8187614ed5565b9050846040840152828103606084015261394d8185614ed5565b86815260c0602082015260006152f260c083018861525f565b82810360408401526153048188614ed5565b9050856060840152828103608084015261531e8186614ed5565b9150508260a0830152979650505050505050565b60008251615344818460208701614eb1565b9190910192915050565b6020815260006128b5602083018461525f565b83815260606020820152600061537a606083018561525f565b9050826040830152949350505050565b8481526080602082015260006153a3608083018661525f565b60ff85166040840152828103606084015261394d8185614ed5565b818103818111156102ca576102ca6150d2565b80820281158282048414176102ca576102ca6150d2565b600083516153fa818460208801614eb1565b83519083019061540e818360208801614eb1565b01949350505050565b60608152600061542a606083018661525f565b65ffffffffffff8516602084015282810360408401526113538185614ed5565b848152608060208201526000615463608083018661525f565b65ffffffffffff85166040840152828103606084015261394d8185614ed5565b82815260006020808301845182860160005b828110156154b157815184529284019290840190600101615495565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826154f157634e487b7160e01b600052601260045260246000fd5b500490565b60008451615508818460208901614eb1565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b6060815260006155486060830186614ed5565b60208301949094525060400152919050565b64ffffffffff818116838216019080821115615578576155786150d2565b5092915050565b87815260e06020820152600061559860e083018961525f565b60ff8816604084015264ffffffffff87811660608501528616608084015260a0830185905282810360c08401526155cf8185614ed5565b9a9950505050505050505050565b60a0815260006155f060a083018861525f565b65ffffffffffff8716602084015264ffffffffff8616604084015284606084015282810360808401526156238185614ed5565b98975050505050505050565b600060ff821660ff8103615645576156456150d2565b6001019291505056fea164736f6c6343000815000a6101006040523480156200001257600080fd5b5060405162004c6d38038062004c6d833981016040819052620000359162000071565b6001600160a01b0393841660805291831660a052821660c0521660e052620000d9565b6001600160a01b03811681146200006e57600080fd5b50565b600080600080608085870312156200008857600080fd5b8451620000958162000058565b6020860151909450620000a88162000058565b6040860151909350620000bb8162000058565b6060860151909250620000ce8162000058565b939692955090935050565b60805160a05160c05160e051614b4c62000121600039600081816106a20152818161159201526116210152600061063a015260006105d2015260006105510152614b4c6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806317d7de7c1161005b57806317d7de7c146100ec57806345ec93541461011a5780637c5b03351461012d578063e1af802c1461014057600080fd5b806301ffc9a714610082578063119df25f146100aa57806313861fb5146100d7575b600080fd5b610095610090366004614310565b610148565b60405190151581526020015b60405180910390f35b6100b261022d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100ea6100e5366004614368565b61023c565b005b6040517f636f72650000000000000000000000000000000000000000000000000000000081526020016100a1565b604051601f1936013581526020016100a1565b6100ea61013b366004614368565b61026e565b6100b2610289565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780ac2fc0000000000000000000000000000000000000000000000000000000014806101db57507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b8061022757507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000610237610293565b905090565b6040517fea8b184c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102766102c5565b61027e61050f565b6102866106c8565b50565b6000610237610bcb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102c25750335b90565b6102cd610c17565b6102d5610c2f565b6102dd610cd4565b6102e5610d5c565b6102ed610dfc565b6102f5610e84565b6102fd610f04565b610305610f8c565b61030d61102c565b6103156110cc565b61031d61116a565b610325611208565b60408051616e7360f01b6020820152600060228201819052603082015261036791015b60405160208183030381529060405261036090614419565b6001611290565b60408051616e7360f01b602082015260006022820181905260308201526103af91015b6040516020818303038152906040526103a290614419565b6103aa61022d565b611375565b60408051616e7360f01b602082015260006022820181905260308201526103f991015b6040516020818303038152906040526103ea90614419565b6103f261022d565b6001611483565b60408051616e7360f01b60208201526473746f726560d81b6022820152600060308201526104279101610348565b60408051616e7360f01b60208201526473746f726560d81b602282015260006030820152610455910161038a565b60408051616e7360f01b60208201526473746f726560d81b60228201526000603082015261048391016103d2565b60408051616e7360f01b6020820152641ddbdc9b1960da1b6022820152600060308201526104b19101610348565b60408051616e7360f01b6020820152641ddbdc9b1960da1b6022820152600060308201526104df910161038a565b60408051616e7360f01b6020820152641ddbdc9b1960da1b60228201526000603082015261050d91016103d2565b565b6040805161737960f01b6020820152600060228201527f4163636573734d616e6167656d656e74000000000000000000000000000000006030820152610590917f000000000000000000000000000000000000000000000000000000000000000091015b60405160208183030381529060405261058b90614419565b611555565b6040805161737960f01b6020820152600060228201527f42616c616e63655472616e73666572000000000000000000000000000000000060308201526105f8917f00000000000000000000000000000000000000000000000000000000000000009101610573565b6040805161737960f01b6020820152600060228201527f426174636843616c6c00000000000000000000000000000000000000000000006030820152610660917f00000000000000000000000000000000000000000000000000000000000000009101610573565b6040805161737960f01b6020820152600060228201527f436f7265526567697374726174696f6e00000000000000000000000000000000603082015261050d917f00000000000000000000000000000000000000000000000000000000000000009101610573565b600060405180606001604052806040518060400160405280601c81526020017f6772616e7441636365737328627974657333322c61646472657373290000000081525081526020016040518060400160405280601d81526020017f7265766f6b6541636365737328627974657333322c61646472657373290000008152508152602001604051806060016040528060228152602001614b1e602291399052905060005b60038110156107fb576040805161737960f01b6020820152600060228201527f4163636573734d616e6167656d656e740000000000000000000000000000000060308201526107e991016040516020818303038152906040526107cd90614419565b8383600381106107df576107df61443d565b6020020151611612565b806107f381614469565b91505061076b565b506040805160a0810182526033918101828152600092829190614ac2606084013981526020016040518060600160405280603181526020016149b7603191399052905060005b60028110156108c8576040805161737960f01b6020820152600060228201527f42616c616e63655472616e73666572000000000000000000000000000000000060308201526108b691015b6040516020818303038152906040526108a490614419565b8383600281106107df576107df61443d565b806108c081614469565b915050610841565b50600060405180604001604052806040518060400160405280601c81526020017f626174636843616c6c2828627974657333322c6279746573295b5d29000000008152508152602001604051806060016040528060288152602001614a43602891399052905060005b6002811015610992576040805161737960f01b6020820152600060228201527f426174636843616c6c00000000000000000000000000000000000000000000006030820152610980910161088c565b8061098a81614469565b915050610931565b50604080516101c081018252601c61018082019081527f696e7374616c6c4d6f64756c6528616464726573732c627974657329000000006101a08301528152815160608101835282815260009260208084019291906149029083013981526020016040518060600160405280602881526020016149e86028913981526020016040518060600160405280602481526020016148de6024913981526020016040518060400160405280601a81526020017f72656769737465724e616d6573706163652862797465733332290000000000008152508152602001604051806060016040528060298152602001614af5602991398152602001604051806060016040528060258152602001614a6b60259139815260200160405180606001604052806024815260200161499360249139815260200160405180606001604052806028815260200161496b602891398152602001604051806060016040528060338152602001614a10603391398152602001604051806060016040528060298152602001614942602991398152602001604051806060016040528060328152602001614a90603291399052905060005b600c811015610bc4576040805161737960f01b6020820152600060228201527f436f7265526567697374726174696f6e000000000000000000000000000000006030820152610bb29101604051602081830303815290604052610ba090614419565b8383600c81106107df576107df61443d565b80610bbc81614469565b915050610b3e565b5050505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610c12573391505090565b919050565b610c1f6116b9565b610c27611759565b61050d6117f7565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610c8f90614419565b7e14010014000000000000000000000000000000000000000000000000000000610cb761187f565b610cbf6118f7565b610cc7611931565b610ccf6119b6565b611a2d565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610d3490614419565b630100080160dd1b610d4461187f565b610d4c611b01565b610d54611931565b610ccf611b3b565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f496e7374616c6c65644d6f64756c657300000000000000000000000000000000603082015261050d9101604051602081830303815290604052610dbc90614419565b7e14010014000000000000000000000000000000000000000000000000000000610de4611bb2565b610dec6118f7565b610df4611c31565b610ccf611cfb565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f5573657244656c65676174696f6e436f00000000000000000000000000000000603082015261050d9101604051602081830303815290604052610e5c90614419565b630100080160dd1b610e6c611d72565b610e7461187f565b610e7c611df1565b610ccf611ebb565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f4e616d65737061636544656c6567617400000000000000000000000000000000603082015261050d9101604051602081830303815290604052610ee490614419565b630100080160dd1b610ef461187f565b610efc61187f565b610e7c611931565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f5265736f75726365416363657373000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610f6490614419565b630101000160d81b610f74611f32565b610f7c611f6c565b610f84611fa6565b610ccf612070565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610fec90614419565b7e1502001401000000000000000000000000000000000000000000000000000061101461187f565b61101c6120e7565b611024612166565b610ccf6121dd565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015261050d910160405160208183030381529060405261108c90614419565b7e240200200400000000000000000000000000000000000000000000000000006110b46122a7565b6110bc6122e1565b6110c4612360565b610ccf6123d7565b60408051611bdd60f21b6020820152641ddbdc9b1960da1b60228201527f46756e6374696f6e5369676e6174757200000000000000000000000000000000603082015261050d910160405160208183030381529060405261112c90614419565b7c01000000000000000000000000000000000000000000000000000000006111526122a7565b61115a6124a1565b611162612360565b610ccf6124db565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d486f6f6b73000000000000000000000000000000000000000000603082015261050d91016040516020818303038152906040526111ca90614419565b7c01000000000000000000000000000000000000000000000000000000006111f061187f565b6111f8612552565b611200612166565b610ccf61258c565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d5265676973747279000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261126890614419565b630100080160dd1b6112786118f7565b61128061187f565b611288612603565b610ccf612166565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106112c6576112c661443d565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015261137091015b60405160208183030381529060405261133890614419565b8260008560405160200161135391151560f81b815260010190565b60408051601f19818403018152919052630101000160d81b61267a565b505050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106113ab576113ab61443d565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526113709061141790614419565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e1401001400000000000000000000000000000000000000000000000000000061267a565b60408051600280825260608201835260009260208301908036833701905050905083816000815181106114b8576114b861443d565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106114f1576114f161443d565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f75726365416363657373000000000000000000000000000000000000603083015261154f9101611320565b50505050565b61137061156061022d565b6040516024810184905273ffffffffffffffffffffffffffffffffffffffff85166044820152600160648201526000907f00000000000000000000000000000000000000000000000000000000000000009060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3350b6a90000000000000000000000000000000000000000000000000000000017905261268f565b61137061161d61022d565b60007f00000000000000000000000000000000000000000000000000000000000000008585868051906020012060405160240161165c939291906144d3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f742d61180000000000000000000000000000000000000000000000000000000017905261268f565b60408051613a3160f11b60208201526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261171990614419565b7e6003022020200000000000000000000000000000000000000000000000000061174161187f565b6117496126bc565b61175161280b565b610ccf612882565b60408051613a3160f11b60208201526473746f726560d81b60228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015261050d91016040516020818303038152906040526117b990614419565b7c01000000000000000000000000000000000000000000000000000000006117df61187f565b6117e7612552565b6117ef61280b565b610ccf612a4a565b60408051613a3160f11b60208201526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261185790614419565b630101000160d81b61186761187f565b61186f611f6c565b611877612ac1565b610ccf612b38565b60408051600180825281830190925260009182919060208083019080368337019050509050605f816000815181106118b9576118b961443d565b602002602001019060c58111156118d2576118d261451e565b908160c58111156118e5576118e561451e565b9052506118f181612baf565b91505090565b604080516001808252818301909252600091829190602080830190803683370190505090506061816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816119485790505090506040518060400160405280600b81526020017f6e616d6573706163654964000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b602002602001018190525090565b604080516001808252818301909252606091816020015b60608152602001906001900390816119cd5790505090506040518060400160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6000611a37610bcb565b90503073ffffffffffffffffffffffffffffffffffffffff821603611a6957611a64878787878787612d73565b611af8565b6040517f0ba51f4900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690630ba51f4990611ac5908a908a908a908a908a908a9060040161458c565b600060405180830381600087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050505b50505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050601f816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611b525790505090506040518060400160405280600781526020017f62616c616e636500000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050604f81600081518110611bec57611bec61443d565b602002602001019060c5811115611c0557611c0561451e565b908160c5811115611c1857611c1861451e565b81525050605f816001815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611c475790505090506040518060400160405280600a81526020017f6d6f64756c654e616d650000000000000000000000000000000000000000000081525081600081518110611ca757611ca761443d565b60200260200101819052506040518060400160405280600d81526020017f617267756d656e74734861736800000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611d125790505090506040518060400160405280600d81526020017f6d6f64756c654164647265737300000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050606181600081518110611dac57611dac61443d565b602002602001019060c5811115611dc557611dc561451e565b908160c5811115611dd857611dd861451e565b815250506061816001815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611e075790505090506040518060400160405280600981526020017f64656c656761746f72000000000000000000000000000000000000000000000081525081600081518110611e6757611e6761443d565b60200260200101819052506040518060400160405280600981526020017f64656c6567617465650000000000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611ed25790505090506040518060400160405280601381526020017f64656c65676174696f6e436f6e74726f6c496400000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050605f81600081518110611dac57611dac61443d565b604080516001808252818301909252600091829190602080830190803683370190505090506060816000815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611fbc5790505090506040518060400160405280600a81526020017f7265736f757263654964000000000000000000000000000000000000000000008152508160008151811061201c5761201c61443d565b60200260200101819052506040518060400160405280600681526020017f63616c6c65720000000000000000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816120875790505090506040518060400160405280600681526020017f6163636573730000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516002808252606082018352600092839291906020830190803683370190505090506061816000815181106121215761212161443d565b602002602001019060c581111561213a5761213a61451e565b908160c581111561214d5761214d61451e565b815250506060816001815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b606081526020019060019003908161217d5790505090506040518060400160405280600881526020017f73797374656d4964000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160028082526060828101909352816020015b60608152602001906001900390816121f35790505090506040518060400160405280600681526020017f73797374656d0000000000000000000000000000000000000000000000000000815250816000815181106122535761225361443d565b60200260200101819052506040518060400160405280600c81526020017f7075626c69634163636573730000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252600091829190602080830190803683370190505090506043816000815181106118b9576118b961443d565b60408051600280825260608201835260009283929190602083019080368337019050509050605f8160008151811061231b5761231b61443d565b602002602001019060c58111156123345761233461451e565b908160c58111156123475761234761451e565b815250506043816001815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816123775790505090506040518060400160405280601081526020017f66756e6374696f6e53656c6563746f7200000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160028082526060828101909352816020015b60608152602001906001900390816123ed5790505090506040518060400160405280600881526020017f73797374656d49640000000000000000000000000000000000000000000000008152508160008151811061244d5761244d61443d565b60200260200101819052506040518060400160405280601681526020017f73797374656d46756e6374696f6e53656c6563746f7200000000000000000000815250816001815181106119a8576119a861443d565b6040805160018082528183019092526000918291906020808301908036833701905050905060c5816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816124f25790505090506040518060400160405280601181526020017f66756e6374696f6e5369676e6174757265000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160018082528183019092526000918291906020808301908036833701905050905060b6816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816125a35790505090506040518060400160405280600581526020017f76616c7565000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b606081526020019060019003908161261a5790505090506040518060400160405280600681526020017f73797374656d0000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b610bc48585612689848761304b565b8561308e565b60606000806126a087878787613322565b91509150816126b2576126b2816133a3565b9695505050505050565b60408051600580825260c082019092526000918291906020820160a080368337019050509050605f816000815181106126f7576126f761443d565b602002602001019060c58111156127105761271061451e565b908160c58111156127235761272361451e565b81525050605f8160018151811061273c5761273c61443d565b602002602001019060c58111156127555761275561451e565b908160c58111156127685761276861451e565b81525050605f816002815181106127815761278161443d565b602002602001019060c581111561279a5761279a61451e565b908160c58111156127ad576127ad61451e565b8152505060c4816003815181106127c6576127c661443d565b602002602001019060c58111156127df576127df61451e565b908160c58111156127f2576127f261451e565b8152505060c4816004815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816128225790505090506040518060400160405280600781526020017f7461626c65496400000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600580825260c08201909252606091816020015b606081526020019060019003908161289a5790505090506040518060400160405280600b81526020017f6669656c644c61796f7574000000000000000000000000000000000000000000815250816000815181106128fa576128fa61443d565b60200260200101819052506040518060400160405280600981526020017f6b6579536368656d6100000000000000000000000000000000000000000000008152508160018151811061294e5761294e61443d565b60200260200101819052506040518060400160405280600b81526020017f76616c7565536368656d61000000000000000000000000000000000000000000815250816002815181106129a2576129a261443d565b60200260200101819052506040518060400160405280601281526020017f616269456e636f6465644b65794e616d65730000000000000000000000000000815250816003815181106129f6576129f661443d565b60200260200101819052506040518060400160405280601481526020017f616269456e636f6465644669656c644e616d6573000000000000000000000000815250816004815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612a615790505090506040518060400160405280600581526020017f686f6f6b73000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612ad85790505090506040518060400160405280600a81526020017f7265736f75726365496400000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612b4f5790505090506040518060400160405280600681526020017f6578697374730000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6000601c82511115612be2578151604051635318beb960e01b8152600401612bd991815260200190565b60405180910390fd5b60008080805b8551811015612cbd576000612c26878381518110612c0857612c0861443d565b602002602001015160c5811115612c2157612c2161451e565b6133ab565b905080600003612c3b57600190920191612c73565b8215612c73576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80840193506008826004601f030302878381518110612c9457612c9461443d565b602002602001015160c5811115612cad57612cad61451e565b901b949094179350600101612be8565b506005811115612ce357604051635318beb960e01b815260048101829052602401612bd9565b84518190036008612cf6600260206145d6565b612d0091906145e9565b83901b939093179260086001612d18600260206145d6565b612d2291906145d6565b612d2c91906145e9565b81901b93909317926008600180612d45600260206145d6565b612d4f91906145d6565b612d5991906145d6565b612d6391906145e9565b9190911b92909217949350505050565b613a3160f11b867fffff0000000000000000000000000000000000000000000000000000000000001614801590612dd15750611bdd60f21b867fffff0000000000000000000000000000000000000000000000000000000000001614155b15612e3257613a3160f11b8687604051602001612df091815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252612bd9939291600401614600565b612e3b8561340b565b612e4684600161358c565b612e5183600061358c565b60e084901c60e885901c0160ff16825114612eb15760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b60e085901c60e886901c0160ff16815114612f115760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff1614612f895760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b612f9286613733565b15612fec578586604051602001612fab91815260200190565b60408051601f19818403018152908290527fdfaaf9cf000000000000000000000000000000000000000000000000000000008252612bd99291600401614641565b6130388686868686604051602001613004919061465a565b60405160208183030381529060405286604051602001613024919061465a565b6040516020818303038152906040526137ff565b613043866001611290565b505050505050565b600080805b8360ff168110156130865761307260ff601b83900360080287901c168361466d565b91508061307e81614469565b915050613050565b509392505050565b611bdd60f21b847fffff00000000000000000000000000000000000000000000000000000000000016036130fd57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8484846040516130f0939291906146bb565b60405180910390a261154f565b60006131098585613903565b9050600061311686613959565b905060005b81518110156131f55760008282815181106131385761313861443d565b602002602001015190506131646004826affffffffffffffffffffff1916613a2190919063ffffffff16565b156131e2576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d906131af908b908b908b908b906004016146ee565b600060405180830381600087803b1580156131c957600080fd5b505af11580156131dd573d6000803e3d6000fd5b505050505b50806131ed81614469565b91505061311b565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be86868660405161322a939291906146bb565b60405180910390a2613245828565ffffffffffff1685613a3f565b60005b8151811015611af85760008282815181106132655761326561443d565b602002602001015190506132916008826affffffffffffffffffffff1916613a2190919063ffffffff16565b1561330f576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba8721906132dc908b908b908b908b906004016146ee565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505b508061331a81614469565b915050613248565b600060608373ffffffffffffffffffffffffffffffffffffffff16613348848888613a55565b6040516133559190614732565b600060405180830381855af49150503d8060008114613390576040519150601f19603f3d011682016040523d82523d6000602084013e613395565b606091505b509097909650945050505050565b805160208201fd5b6000808260c58111156133c0576133c061451e565b60ff16905060618110156133da57601f1660010192915050565b60618360c58111156133ee576133ee61451e565b036133fc5750601492915050565b50600092915050565b50919050565b80613442576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344d82613a84565b90506005811115613494576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401612bd9565b600061349f83613ac1565b905060006134ad838361466d565b9050601c8111156134f4576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401612bd9565b60005b82811015610bc45760ff601b82900360080286901c166000819003613548576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020811115613583576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016134f7565b80158015613598575081155b156135b957604051635318beb960e01b815260006004820152602401612bd9565b60006135c483613a84565b905060058111156135eb57604051635318beb960e01b815260048101829052602401612bd9565b60006135f684613ac1565b90506000613604838361466d565b9050601c81111561362b57604051635318beb960e01b815260048101829052602401612bd9565b60008060005b838110156136ec5760006136596136488a84613ad3565b60c5811115612c2157612c2161451e565b11156136a357848110613698576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909201916136e4565b848110156136dd576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b600101613631565b5083821461371057604051635318beb960e01b815260048101839052602401612bd9565b848114611af857604051635318beb960e01b815260048101829052602401612bd9565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061376c5761376c61443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526000906137eb906137db90614419565b836000630101000160d81b613afb565b90506137f78160f81c90565b949350505050565b600061380c868686613b31565b9050600061381a8484613b53565b905060006138288585613b70565b604080516001808252818301909252919250600091906020808301908036833701905050905089816000815181106138625761386261443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526138f7906138ce90614419565b828686867e60030220202000000000000000000000000000000000000000000000000000613b9c565b50505050505050505050565b6000828260405160200161391892919061474e565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106139935761399361443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090613a0a90613a0290614419565b836000613ece565b90506137f7613a1c8260008451613f08565b613f98565b60008160ff1682613a328560581c90565b1660ff1614905092915050565b61137083838351613a508560200190565b613fa9565b6060838383604051602001613a6c93929190614789565b60405160208183030381529060405290509392505050565b60006008600180613a97600260206145d6565b613aa191906145d6565b613aab91906145d6565b613ab591906145e9565b8260ff911c1692915050565b600060086001613aa1600260206145d6565b6000601b8290036008028360ff911c1660c5811115613af457613af461451e565b9392505050565b6000613b28613b0a8686613903565b60ff858116601b0360080285901c16613b23858761304b565b614069565b95945050505050565b6040805160208101859052908101839052606081810183905290608001613a6c565b8151815160009181810160389190911b1760609190911b17613af4565b60608282604051602001613b859291906147db565b604051602081830303815290604052905092915050565b611bdd60f21b867fffff0000000000000000000000000000000000000000000000000000000000001603613c0d57857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a986868686604051613c00949392919061480a565b60405180910390a2613043565b6000613c1887613959565b905060005b8151811015613cfb576000828281518110613c3a57613c3a61443d565b60200260200101519050613c666001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613ce8576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90613cb5908c908c908c908c908c908c90600401614849565b600060405180830381600087803b158015613ccf57600080fd5b505af1158015613ce3573d6000803e3d6000fd5b505050505b5080613cf381614469565b915050613c1d565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051613d32949392919061480a565b60405180910390a26000613d468888613903565b90506000602087019050613d5e826000895184613fa9565b6000613d6985613a84565b1115613ded576000613d7b8a8a6140ba565b878155905060208601915060008060005b613d9588613a84565b8160ff161015613de857613daa8d8d83614110565b9250613dc58a8260ff166028026038011c64ffffffffff1690565b9150613dd48360008488613fa9565b613dde828661466d565b9450600101613d8c565b505050505b60005b83518110156138f7576000848281518110613e0d57613e0d61443d565b60200260200101519050613e396002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613ebb576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90613e88908e908e908e908e908e908e90600401614849565b600060405180830381600087803b158015613ea257600080fd5b505af1158015613eb6573d6000803e3d6000fd5b505050505b5080613ec681614469565b915050613df0565b60606137f7613ede858585614110565b6000613f0385613eee8989614190565b9060ff166028026038011c64ffffffffff1690565b6141a3565b6000818311158015613f1b575083518211155b613f57578383836040517f23230fa3000000000000000000000000000000000000000000000000000000008152600401612bd9939291906148a2565b60208401613f65848261466d565b90506000613f7385856145d6565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000613af483601560006141c6565b82156140235760208310613fd357602083048401935060208381613fcf57613fcf6148c7565b0692505b82156140235760208390036000600019600885021c1990506008850281811c91508351811c905081198754168282161787555081841161401457505061154f565b50600194909401939182900391015b5b602082106140455780518455600190930192601f1990910190602001614024565b811561154f576000600019600884021c198554835182169119161785555050505050565b60006020821061408f5760208204840193506020828161408b5761408b6148c7565b0691505b508254600882021b602082900380841115613086576001850154600882021c82179150509392505050565b600082826040516020016140cf92919061474e565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000838360405160200161412592919061474e565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b6000613af461419f84846140ba565b5490565b60405160208101601f19603f848401011660405282825261308685858584614241565b606060006141d48560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816141fa576141fa6148c7565b04905060405193506020840160208202810160405281855260005b82811015614235578451871c825293870193602090910190600101614215565b50505050509392505050565b82156142ca576020831061426b57602083048401935060208381614267576142676148c7565b0692505b82156142ca57602083900360008184101561428f5750600019600884021c1961429a565b50600019600882021c195b8554600886021b8119845116828216178452508184116142bb57505061154f565b50600194909401939182900391015b5b602082106142ec5783548152600190930192601f19909101906020016142cb565b811561154f576000600019600884021c198251865482169119161782525050505050565b60006020828403121561432257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613af457600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561437a57600080fd5b813567ffffffffffffffff8082111561439257600080fd5b818401915084601f8301126143a657600080fd5b8135818111156143b8576143b8614352565b604051601f8201601f19908116603f011681019083821181831017156143e0576143e0614352565b816040528281528760208487010111156143f957600080fd5b826020860160208301376000928101602001929092525095945050505050565b805160208083015191908110156134055760001960209190910360031b1b16919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361447c5761447c614453565b5060010190565b60005b8381101561449e578181015183820152602001614486565b50506000910152565b600081518084526144bf816020860160208601614483565b601f01601f19169290920160200192915050565b8381526060602082015260006144ec60608301856144a7565b90507fffffffff0000000000000000000000000000000000000000000000000000000083166040830152949350505050565b634e487b7160e01b600052602160045260246000fd5b600082825180855260208086019550808260051b84010181860160005b8481101561457f57601f1986840301895261456d8383516144a7565b98840198925090830190600101614551565b5090979650505050505050565b86815285602082015284604082015283606082015260c0608082015260006145b760c0830185614534565b82810360a08401526145c98185614534565b9998505050505050505050565b8181038181111561022757610227614453565b808202811582820484141761022757610227614453565b7fffff00000000000000000000000000000000000000000000000000000000000084168152826020820152606060408201526000613b2860608301846144a7565b8281526040602082015260006137f760408301846144a7565b602081526000613af46020830184614534565b8082018082111561022757610227614453565b600081518084526020808501945080840160005b838110156146b057815187529582019590820190600101614694565b509495945050505050565b6060815260006146ce6060830186614680565b65ffffffffffff8516602084015282810360408401526126b281856144a7565b8481526080602082015260006147076080830186614680565b65ffffffffffff85166040840152828103606084015261472781856144a7565b979650505050505050565b60008251614744818460208701614483565b9190910192915050565b82815260006020808301845182860160005b8281101561477c57815184529284019290840190600101614760565b5091979650505050505050565b6000845161479b818460208901614483565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600083516147ed818460208801614483565b835190830190614801818360208801614483565b01949350505050565b60808152600061481d6080830187614680565b828103602084015261482f81876144a7565b9050846040840152828103606084015261472781856144a7565b86815260c06020820152600061486260c0830188614680565b828103604084015261487481886144a7565b9050856060840152828103608084015261488e81866144a7565b9150508260a0830152979650505050505050565b6060815260006148b560608301866144a7565b60208301949094525060400152919050565b634e487b7160e01b600052601260045260246000fdfe756e726567697374657253746f7265486f6f6b28627974657333322c616464726573732972656769737465725461626c6528627974657333322c627974657333322c627974657333322c627974657333322c737472696e675b5d2c737472696e675b5d29726567697374657244656c65676174696f6e28616464726573732c627974657333322c627974657329726567697374657246756e6374696f6e53656c6563746f7228627974657333322c737472696e6729726567697374657253797374656d28627974657333322c616464726573732c626f6f6c297472616e7366657242616c616e6365546f4164647265737328627974657333322c616464726573732c75696e7432353629726567697374657253746f7265486f6f6b28627974657333322c616464726573732c75696e7438297265676973746572526f6f7446756e6374696f6e53656c6563746f7228627974657333322c737472696e672c62797465733429626174636843616c6c46726f6d2828616464726573732c627974657333322c6279746573295b5d29756e726567697374657253797374656d486f6f6b28627974657333322c616464726573732972656769737465724e616d65737061636544656c65676174696f6e28627974657333322c627974657333322c6279746573297472616e7366657242616c616e6365546f4e616d65737061636528627974657333322c627974657333322c75696e7432353629726567697374657253797374656d486f6f6b28627974657333322c616464726573732c75696e7438297472616e736665724f776e65727368697028627974657333322c6164647265737329a164736f6c6343000815000aa164736f6c6343000815000a","sourceMap":"1671:1949:198:-:0;;;1572:26:101;;;1594:4;-1:-1:-1;;1572:26:101;;;;;;;;3126:44:104;;;;;;;;;;;228:9:0;186:51;;1861:98:198;-1:-1:-1;;;;;;;;;1861:25:198;:98::i;:::-;1827:132;;1671:1949;;;;;;;;;;;;941:257:59;1028:10;1157:26;399:6;336:5:16;1157:26:59;:::i;:::-;-1:-1:-1;;;;;;1084:15:59;;-1:-1:-1;;;;;;;336:5:16;1103:31:59;;;;1084:51;-1:-1:-1;;;;;;1139:13:59;;:45;;;1084:101;;-1:-1:-1;941:257:59;;;;;:::o;14:222:203:-;79:9;;;100:10;;;97:133;;;152:10;147:3;143:20;140:1;133:31;187:4;184:1;177:15;215:4;212:1;205:15;97:133;14:222;;;;:::o;:::-;1671:1949:198;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561001057600080fd5b50600436106100f55760003560e01c806385226c8111610097578063d81bebb911610066578063d81bebb914610194578063e20c9f711461019c578063f60736ce146101a4578063fa7626d4146101ac57600080fd5b806385226c8114610157578063916a17c61461016c578063b5508aa914610174578063ba414fa61461017c57600080fd5b80633ae50144116100d35780633ae501441461012a5780633e5e3c23146101325780633f7286f41461013a57806366d9a9a01461014257600080fd5b806306e28a34146100fa5780630a9254e4146101045780631ed7831c1461010c575b600080fd5b6101026101b9565b005b610102610251565b610114610331565b604051610121919061164b565b60405180910390f35b610102610393565b610114610593565b6101146105f3565b61014a610653565b6040516101219190611698565b61015f610757565b60405161012191906117b3565b61014a610827565b61015f610922565b6101846109f2565b6040519015158152602001610121565b610102610b34565b610114610b3c565b610102610b9c565b6000546101849060ff1681565b6101c1610ba4565b602154604080517fd737d0c7000000000000000000000000000000000000000000000000000000008152905161024f926001600160a01b03169163d737d0c79160048083019260209291908290030181865afa158015610225573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610249919061182a565b30610e1a565b565b60405161025d906115db565b604051809103906000f080158015610279573d6000803e3d6000fd5b50601f80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216918217905563c4d66de86102be610f3a565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b15801561031757600080fd5b505af115801561032b573d6000803e3d6000fd5b50505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561038957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161036b575b5050505050905090565b61039b610ba4565b6040517f491cc7c200000000000000000000000000000000000000000000000000000000815260016004820181905260248201819052604482018190526064820152737109709ecfa91a80626ff3989d68f67f5b1dd12d9063491cc7c290608401600060405180830381600087803b15801561041657600080fd5b505af115801561042a573d6000803e3d6000fd5b505050507fe762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d60405161048d906020808252600b908201527f68656c6c6f20776f726c64000000000000000000000000000000000000000000604082015260600190565b60405180910390a16021546040517f319585fb00000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f68656c6c6f20776f726c6400000000000000000000000000000000000000000060448201526000916001600160a01b03169063319585fb906064016000604051808303816000875af1158015610527573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261054f91908101906118f1565b9050610590816040518060400160405280600b81526020017f68656c6c6f20776f726c64000000000000000000000000000000000000000000815250611036565b50565b6060600f805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b6060600e805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b60606012805480602002602001604051908101604052809291908181526020016000905b8282101561074e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561073657602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116106e35790505b50505050508152505081526020019060010190610677565b50505050905090565b60606011805480602002602001604051908101604052809291908181526020016000905b8282101561074e57838290600052602060002001805461079a90611942565b80601f01602080910402602001604051908101604052809291908181526020018280546107c690611942565b80156108135780601f106107e857610100808354040283529160200191610813565b820191906000526020600020905b8154815290600101906020018083116107f657829003601f168201915b50505050508152602001906001019061077b565b60606013805480602002602001604051908101604052809291908181526020016000905b8282101561074e5760008481526020908190206040805180820182526002860290920180546001600160a01b0316835260018101805483518187028101870190945280845293949193858301939283018282801561090a57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190600401906020826003010492830192600103820291508084116108b75790505b5050505050815250508152602001906001019061084b565b60606010805480602002602001604051908101604052809291908181526020016000905b8282101561074e57838290600052602060002001805461096590611942565b80601f016020809104026020016040519081016040528092919081815260200182805461099190611942565b80156109de5780601f106109b3576101008083540402835291602001916109de565b820191906000526020600020905b8154815290600101906020018083116109c157829003601f168201915b505050505081526020019060010190610946565b60008054610100900460ff1615610a125750600054610100900460ff1690565b6000737109709ecfa91a80626ff3989d68f67f5b1dd12d3b15610b2f5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c6564000000000000000000000000000000000000000000000000000082840152825180830384018152606083019093526000929091610ab7917f667f9d70ca411d70ead50d8d5c22070dafc36ad75f3dcf5e7237b22ade9aecc491608001611995565b60408051601f1981840301815290829052610ad1916119dd565b6000604051808303816000865af19150503d8060008114610b0e576040519150601f19603f3d011682016040523d82523d6000602084013e610b13565b606091505b5091505080806020019051810190610b2b91906119f9565b9150505b919050565b6101c161117c565b6060600c805480602002602001604051908101604052809291908181526020018280548015610389576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161036b575050505050905090565b61039b61117c565b601f546040516001600160a01b039091169063af068c9e90610bc5906115e9565b604051809103906000f080158015610be1573d6000803e3d6000fd5b50604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e085901b16909152610c2a919060248101611a1b565b600060405180830381600087803b158015610c4457600080fd5b505af1158015610c58573d6000803e3d6000fd5b5050601f546020546001600160a01b03909116925063b29e40899150610cbd907dffffffffffffffffffffffffffff00000000000000000000000000000000167f6e730000000000000000000000000000000000000000000000000000000000001790565b6040518263ffffffff1660e01b8152600401610cdb91815260200190565b600060405180830381600087803b158015610cf557600080fd5b505af1158015610d09573d6000803e3d6000fd5b505050506000604051610d1b906115f7565b604051809103906000f080158015610d37573d6000803e3d6000fd5b50601f546020546040517f3350b6a900000000000000000000000000000000000000000000000000000000815260048101919091526001600160a01b03808416602483015260016044830152929350911690633350b6a990606401600060405180830381600087803b158015610dac57600080fd5b505af1158015610dc0573d6000803e3d6000fd5b5050601f54602054610ddf93506001600160a01b03909116915061119d565b602180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905550565b806001600160a01b0316826001600160a01b031614610f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f50604051610eb89060208082526025908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b61646460408201527f726573735d000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f82604051610eef9190611a3d565b60405180910390a17f9c4e8541ca8f0dc1c413f9108f66d82d3cecb1bddbce437a61caa3175c4cc96f81604051610f269190611a91565b60405180910390a1610f3661149b565b5050565b6000604051610f4890611605565b604051809103906000f080158015610f64573d6000803e3d6000fd5b50604051610f7190611613565b604051809103906000f080158015610f8d573d6000803e3d6000fd5b50604051610f9a90611621565b604051809103906000f080158015610fb6573d6000803e3d6000fd5b50604051610fc39061162f565b604051809103906000f080158015610fdf573d6000803e3d6000fd5b50604051610fec9061163d565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015611030573d6000803e3d6000fd5b50905090565b8060405160200161104791906119dd565b604051602081830303815290604052805190602001208260405160200161106e91906119dd565b6040516020818303038152906040528051906020012014610f36577f41304facd9323d75b11bcdd609cb38effffdb05710f7caf0e9b16c6d9d709f5060405161110e9060208082526024908201527f4572726f723a2061203d3d2062206e6f7420736174697366696564205b73747260408201527f696e675d00000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf3583826040516111459190611ace565b60405180910390a17f280f4446b28a1372417dda658d30b95b2992b12ac9c7f378535f29a97acf358381604051610f269190611b1d565b601f546040516001600160a01b0390911690638da798da90610bc5906115e9565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526000916001600160a01b03851691633ae7af08910160405160208183030381529060405261124090611b5a565b6040516024810186905260440160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fb9eb8bfb00000000000000000000000000000000000000000000000000000000179052517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526112dd929190600401611b9c565b6000604051808303816000875af11580156112fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261132491908101906118f1565b806020019051810190611337919061182a565b90506001600160a01b03831663bfdfaff77f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff00000000000000000000000000000000851617604080517f737900000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201520160405160208183030381529060405261141a90611b5a565b604080516000815260208101918290527fffffffff0000000000000000000000000000000000000000000000000000000060e086901b1690915261146392919060248101611bb5565b600060405180830381600087803b15801561147d57600080fd5b505af1158015611491573d6000803e3d6000fd5b5050505092915050565b737109709ecfa91a80626ff3989d68f67f5b1dd12d3b156115ad5760408051737109709ecfa91a80626ff3989d68f67f5b1dd12d602082018190527f6661696c656400000000000000000000000000000000000000000000000000009282019290925260016060820152600091907f70ca10bbd0dbfd9020a9f4b13402c16cb120705e0d1c0aeab10fa353ae586fc49060800160408051601f198184030181529082905261154c9291602001611995565b60408051601f1981840301815290829052611566916119dd565b6000604051808303816000865af19150503d80600081146115a3576040519150601f19603f3d011682016040523d82523d6000602084013e6115a8565b606091505b505050505b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100179055565b61553a8062001bde83390190565b615a5d806200711883390190565b610a97806200cb7583390190565b611a79806200d60c83390190565b6118cc806200f08583390190565b610b15806201095183390190565b61567c806201146683390190565b614c6d8062016ae283390190565b6020808252825182820181905260009190848201906040850190845b8181101561168c5783516001600160a01b031683529284019291840191600101611667565b50909695505050505050565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561175457898403603f19018652825180516001600160a01b03168552880151888501889052805188860181905290890190839060608701905b8083101561173f5783517fffffffff00000000000000000000000000000000000000000000000000000000168252928b019260019290920191908b01906116fd565b50978a019795505050918701916001016116c0565b50919998505050505050505050565b60005b8381101561177e578181015183820152602001611766565b50506000910152565b6000815180845261179f816020860160208601611763565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561180857603f198886030184526117f6858351611787565b945092850192908501906001016117da565b5092979650505050505050565b6001600160a01b038116811461059057600080fd5b60006020828403121561183c57600080fd5b815161184781611815565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff808411156118985761189861184e565b604051601f8501601f19908116603f011681019082821181831017156118c0576118c061184e565b816040528093508581528686860111156118d957600080fd5b6118e7866020830187611763565b5050509392505050565b60006020828403121561190357600080fd5b815167ffffffffffffffff81111561191a57600080fd5b8201601f8101841361192b57600080fd5b61193a8482516020840161187d565b949350505050565b600181811c9082168061195657607f821691505b60208210810361198f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7fffffffff0000000000000000000000000000000000000000000000000000000083168152600082516119cf816004850160208701611763565b919091016004019392505050565b600082516119ef818460208701611763565b9190910192915050565b600060208284031215611a0b57600080fd5b8151801515811461184757600080fd5b6001600160a01b038316815260406020820152600061193a6040830184611787565b604081526000611a7a60408301600a81527f2020202020204c65667400000000000000000000000000000000000000000000602082015260400190565b90506001600160a01b038316602083015292915050565b604081526000611a7a60408301600a81527f2020202020526967687400000000000000000000000000000000000000000000602082015260400190565b604081526000611b0b60408301600a81527f2020202020204c65667400000000000000000000000000000000000000000000602082015260400190565b828103602084015261193a8185611787565b604081526000611b0b60408301600a81527f2020202020526967687400000000000000000000000000000000000000000000602082015260400190565b8051602080830151919081101561198f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209190910360031b1b16919050565b82815260406020820152600061193a6040830184611787565b838152826020820152606060408201526000611bd46060830184611787565b9594505050505056fe60a060405234801561001057600080fd5b506100477f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e17580546001600160a01b03191630179055565b6040516e0c4b8c0b8c0b5d5b985d591a5d1959608a1b907fc7f5fdc8526b76f54916701bc910876243ffff2a40b0bb8d59eea8151c52c00590600090a2336080526040516e0c4b8c0b8c0b5d5b985d591a5d1959608a1b907f7f8f36afe3fb61c459c1a54a60b8a477eab02cc58e49f547561a40906239cb8290600090a2608051615452620000e86000396000818161036f015261139601526154526000f3fe6080604052600436106101d15760003560e01c80638c364d59116100f7578063c4d66de811610095578063d9c03a0411610064578063d9c03a04146106d1578063dbbf0e21146105d1578063e228a4a3146106f1578063ef6ea8621461071157610266565b8063c4d66de814610651578063cc49db7e14610671578063d03edb8c14610691578063d4285dc2146106b157610266565b8063af068c9e116100d1578063af068c9e146105f1578063b047c1eb14610611578063c0a2895a14610631578063c11222291461054b57610266565b80638c364d59146105915780639f1fcf0a146105b1578063a53417ed146105d157610266565b8063390baae01161016f5780634dc77d971161013e5780634dc77d971461050b578063505a181d1461052b5780636951955d1461054b578063894ecc581461057e57610266565b8063390baae01461047b5780633a77c2c21461049b5780633ae7af08146104c9578063419b58fd146104dc57610266565b8063150f3262116101ab578063150f3262146103fb5780631e7889771461041b578063298314fb1461043b5780633708196e1461045b57610266565b806302d05d3f1461035d57806305242d2f146103ae578063114a7266146103db57610266565b366102665760408051616e7360f01b6020820152600060228201819052603082018190529161021891016040516020818303038152906040526102139061459d565b610731565b60408051616e7360f01b6020820152600060228201819052603082015291925061026491016040516020818303038152906040526102559061459d565b61025f34846145da565b61080f565b005b303303610299576040516327a1460b60e21b81526001600160e01b03196000351660048201526024015b60405180910390fd5b6000806102b16000356001600160e01b031916610901565b91509150816000801b036102ff576040517ffdde54e20000000000000000000000000000000000000000000000000000000081526001600160e01b0319600035166004820152602401610290565b60006103436000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250869150610a119050565b9050600061035333858434610a44565b9050805160208201f35b34801561036957600080fd5b506103917f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103ba57600080fd5b506103ce6103c936600461464a565b610a71565b6040516103a59190614700565b3480156103e757600080fd5b506102646103f6366004614755565b610ab4565b34801561040757600080fd5b50610264610416366004614755565b610b67565b34801561042757600080fd5b506103ce6104363660046147e2565b610c12565b34801561044757600080fd5b50610264610456366004614840565b610c5c565b34801561046757600080fd5b506102646104763660046148ed565b610d45565b34801561048757600080fd5b506102646104963660046148ed565b610dfb565b3480156104a757600080fd5b506104bb6104b6366004614983565b610ea8565b6040519081526020016103a5565b6103ce6104d7366004614a53565b610eb9565b3480156104e857600080fd5b506104fc6104f7366004614a9a565b610ef5565b6040516103a593929190614aed565b34801561051757600080fd5b506103ce610526366004614b8d565b610f4a565b34801561053757600080fd5b50610264610546366004614bf6565b610f59565b34801561055757600080fd5b507f312e302e302d756e6175646974656400000000000000000000000000000000006104bb565b6103ce61058c366004614c57565b610fce565b34801561059d57600080fd5b506104bb6105ac36600461464a565b61112a565b3480156105bd57600080fd5b506104bb6105cc366004614cb0565b61116d565b3480156105dd57600080fd5b506104bb6105ec366004614d0f565b61117b565b3480156105fd57600080fd5b5061026461060c366004614d66565b611188565b34801561061d57600080fd5b5061026461062c366004614da0565b611204565b34801561063d57600080fd5b5061026461064c366004614e2f565b6112af565b34801561065d57600080fd5b5061026461066c366004614ebc565b61135d565b34801561067d57600080fd5b506104fc61068c366004614bf6565b6114d8565b34801561069d57600080fd5b506103ce6106ac3660046147e2565b61152a565b3480156106bd57600080fd5b506104bb6106cc366004614983565b61156b565b3480156106dd57600080fd5b506102646106ec36600461464a565b611576565b3480156106fd57600080fd5b506104bb61070c366004614983565b6115f6565b34801561071d57600080fd5b5061026461072c366004614755565b611601565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061076a5761076a614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e636573000000000000000000000000000000000000000000000000603083015260009161080791015b6040516020818303038152906040526107df9061459d565b8360007e200100200000000000000000000000000000000000000000000000000000006116ac565b949350505050565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061084557610845614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015281518082039093018352810190526108fc906108b19061459d565b826000856040516020016108c791815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006116d9565b505050565b6040805160018082528183019092526000918291829160208083019080368337019050509050837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061095a5761095a614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f720000000000000000000000000000000060308201528151808203909301835281019052600090819081906109f3906109cd9061459d565b857e240200200400000000000000000000000000000000000000000000000000006116ee565b925092509250610a048383836117f6565b9550955050505050915091565b82820160200180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1682179052825b9392505050565b6060600080610a558787878761180e565b9150915081610a6757610a67816119f2565b9695505050505050565b6060610a67868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791506119fa9050565b303303610ae2576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610aec8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611a8b92505050565b505050505050565b303303610b95576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610b9f8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f890181900481028201810190925287815289935091508790879081908401838280828437600092019190915250611aa692505050565b6060610c5385858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250879250611ae1915050565b95945050505050565b303303610c8a576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610c948833611a3f565b610d3b8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8c018190048102820181019092528a815292508a915089908190840183828082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250611b1b92505050565b5050505050505050565b303303610d73576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610d7d8733611a3f565b610df28787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a935091508890889081908401838280828437600092019190915250889250611b31915050565b50505050505050565b303303610e29576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610e338733611a3f565b610df28787878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f8a018190048102820181019092528881528a9350915088908890819084018382808284376000920191909152508892506116d9915050565b6000610eb382611b74565b92915050565b6060303303610ee9576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610a3d33848434610a44565b606060006060610f3a878787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506116ee915050565b9250925092509450945094915050565b6060610a678686868686611c44565b303303610f87576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b610f918333611a3f565b6108fc83838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250611d0592505050565b6060303303610ffe576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b336001600160a01b038516036110215761101a33848434610a44565b9050610a3d565b600061102d8533611d18565b905061103c8186338787611dea565b156110555761104d85858534610a44565b915050610a3d565b6000611062866000611d18565b90506110718187338888611dea565b1561108b5761108286868634610a44565b92505050610a3d565b60006110bd616e7360f01b7dffffffffffffffffffffffffffff00000000000000000000000000000000881617611ebf565b90506110cc8188338989611dea565b156110e7576110dd87878734610a44565b9350505050610a3d565b6040517fc86745f90000000000000000000000000000000000000000000000000000000081526001600160a01b0388166004820152336024820152604401610290565b6000610a67868686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508892508791506116ac9050565b6000610c5385858585611f59565b6000610807848484611fa1565b3033036111b6576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b60408051616e7360f01b602082015260006022820181905260308201526111f691016040516020818303038152906040526111f09061459d565b33611fb7565b6112008282612008565b5050565b303303611232576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b61123c8633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061211a92505050565b3033036112dd576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6112e78833611a3f565b610d3b8888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528b93508a9250899189908990819084018382808284376000920191909152506123c992505050565b30330361138b576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461142f5760408051616e7360f01b602082015260006022820181905260308201526113fa91016040516020818303038152906040526113f59061459d565b6123e1565b336040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610290929190614eef565b600061147b7f636f7265000000000000000000000000000000000000000000000000000000007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47061250f565b6001600160a01b0316146114bb576040517f15e34a4800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008152602081019091526114d5908290612008565b50565b60606000606061151b8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061262492505050565b92509250925093509350939050565b6060610c538585858080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525087925061264a915050565b6000610eb382612660565b3033036115a4576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6115ae8533611a3f565b6115ef858585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508792508691506126d49050565b5050505050565b6000610eb38261272d565b30330361162f576040516327a1460b60e21b81526001600160e01b0319600035166004820152602401610290565b6116398633611a3f565b610b5f8686868080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020601f89018190048102820181019092528781528993509150879087908190840183828082843760009201919091525061275392505050565b6000610c536116bb868661278e565b60ff858116601b0360080285901c166116d485876127e4565b612827565b6115ef85856116e884876127e4565b8561211a565b60606000606060006116ff85612878565b905061170c87878361289b565b93506000611719866128d4565b905080156117eb5761172b8888612911565b935066ffffffffffffff841667ffffffffffffffff81111561174f5761174f61499c565b6040519080825280601f01601f191660200182016040528015611779576020820181803683370190505b5092506020830160005b828160ff1610156117e857600061179b8b8b84612924565b905060006117b8888460ff166028026038011c64ffffffffff1690565b90506117c782600083876129a4565b6117d181856145da565b9350505080806117e090614f1a565b915050611783565b50505b505093509350939050565b60008061180285612a73565b90969095509350505050565b60006060600061181d86612a88565b905060005b81518110156118fa57600082828151811061183f5761183f614ed9565b6020026020010151905061186b6001826affffffffffffffffffffff1916612b5690919063ffffffff16565b156118e7576040517fc3323031000000000000000000000000000000000000000000000000000000008152606082901c9063c3323031906118b4908c908c908c90600401614f39565b600060405180830381600087803b1580156118ce57600080fd5b505af11580156118e2573d6000803e3d6000fd5b505050505b50806118f281614f61565b915050611822565b5061190787858888612b74565b909350915060005b81518110156119e757600082828151811061192c5761192c614ed9565b602002602001015190506119586002826affffffffffffffffffffff1916612b5690919063ffffffff16565b156119d4576040517f973d8f99000000000000000000000000000000000000000000000000000000008152606082901c9063973d8f99906119a1908c908c908c90600401614f39565b600060405180830381600087803b1580156119bb57600080fd5b505af11580156119cf573d6000803e3d6000fd5b505050505b50806119df81614f61565b91505061190f565b505094509492505050565b805160208201fd5b6060611a0582612c8f565b8360ff161015611a2257611a1b85858585612ca1565b9050610807565b611a1b8585611a3085612c8f565b611a3a9087614f7b565b611ae1565b611a498282612cce565b61120057611a56826123e1565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610290929190614eef565b611aa084848484611a9b89611b74565b611b31565b50505050565b6000611ab28585612911565b90506000611acf828560ff166028026038011c64ffffffffff1690565b9050610b5f8686868460008888612d11565b6060610807611af1858585612924565b6000611b1685611b018989612911565b9060ff166028026038011c64ffffffffff1690565b613127565b6115ef8585858585611b2c8b611b74565b61314a565b611b3a81612c8f565b8360ff161015611b5657611b5185858585856116d9565b6115ef565b6115ef8585611b6484612c8f565b611b6e9087614f7b565b85612753565b60408051613a3160f11b60208201526473746f726560d81b6022820152655461626c657360d01b603082015260009101604051602081830303815290604052611bbc9061459d565b8203611be857507e60030220202000000000000000000000000000000000000000000000000000919050565b60408051613a3160f11b60208201526473746f726560d81b6022820152655461626c657360d01b6030820152610eb391611c3b9101604051602081830303815290604052611c359061459d565b846134a3565b60206000612827565b60606000611c528787612911565b90506000611c6f828760ff166028026038011c64ffffffffff1690565b90508085101580611c7f57508084115b15611cda578081861015611c9d57611c98600186614f94565b611c9f565b855b6040517f7e8578d300000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610290565b6000611ce7898989612924565b9050611cf88187611b168189614f94565b9998505050505050505050565b6112008282611d1385611b74565b6134bf565b60408051600280825260608201835260009283929190602083019080368337019050509050836001600160a01b031660001b81600081518110611d5d57611d5d614ed9565b602002602001018181525050826001600160a01b031660001b81600181518110611d8957611d89614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5573657244656c65676174696f6e436f000000000000000000000000000000006030830152600091610c5391016107c7565b6000611df5866137d2565b15611e0257506001610c53565b85611e0f57506000610c53565b600080611e8b8660008a8a8989604051602401611e2e93929190614f39565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1a86b55000000000000000000000000000000000000000000000000000000000179052612b74565b9150915081611e9f57600092505050610c53565b80806020019051810190611eb39190614fa7565b98975050505050505050565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611ef857611ef8614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d65737061636544656c6567617400000000000000000000000000000000603083015260009161080791016107c7565b600080611f6583612c8f565b90508060ff168460ff161015611f8d5760ff848116601b0360080284901c165b915050610807565b611f858686611f9c8488614f7b565b61384d565b6000610807848484611fb288611b74565b611f59565b6001600160a01b038116611ff1616e7360f01b7dffffffffffffffffffffffffffff0000000000000000000000000000000085161761385d565b6001600160a01b03161461120057611a56826123e1565b612032827f780ac2fc00000000000000000000000000000000000000000000000000000000613902565b6120a7336000848460405160240161204a9190614700565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f7c5b03350000000000000000000000000000000000000000000000000000000017905261395d565b50611200826001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210d9190614fc9565b825160208401208461396e565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff00000000000000000000000000000000000000000000000000000000000016036121a457837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161219793929190615037565b60405180910390a2611aa0565b60006121b0858561278e565b905060006121bd86613aae565b905060005b815181101561229c5760008282815181106121df576121df614ed9565b6020026020010151905061220b6004826affffffffffffffffffffff1916612b5690919063ffffffff16565b15612289576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90612256908b908b908b908b9060040161506a565b600060405180830381600087803b15801561227057600080fd5b505af1158015612284573d6000803e3d6000fd5b505050505b508061229481614f61565b9150506121c2565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8686866040516122d193929190615037565b60405180910390a26122ec828565ffffffffffff1685613b49565b60005b8151811015610df257600082828151811061230c5761230c614ed9565b602002602001015190506123386008826affffffffffffffffffffff1916612b5690919063ffffffff16565b156123b6576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190612383908b908b908b908b9060040161506a565b600060405180830381600087803b15801561239d57600080fd5b505af11580156123b1573d6000803e3d6000fd5b505050505b50806123c181614f61565b9150506122ef565b610b5f8686868686866123dc8d8d612911565b612d11565b606081601081901b60006123f483613b5f565b9050827fffffffffffffffffffffffffffff00000000000000000000000000000000000083161561244f5761244a7fffffffffffffffffffffffffffff0000000000000000000000000000000000008416613b76565b612486565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6fffffffffffffffffffffffffffffffff198316156124ad576124a883613b76565b6124e4565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016124f6939291906150a3565b6040516020818303038152906040529350505050919050565b60408051600280825260608201835260009283929190602083019080368337019050509050836fffffffffffffffffffffffffffffffff19168160008151811061255b5761255b614ed9565b602002602001018181525050828160018151811061257b5761257b614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f496e7374616c6c65644d6f64756c657300000000000000000000000000000000603083015260009161261891015b6040516020818303038152906040526125f09061459d565b8360007e140100140000000000000000000000000000000000000000000000000000006116ac565b60601c95945050505050565b60606000606061263d858561263888611b74565b6116ee565b9250925092509250925092565b606061080784848461265b88611b74565b6119fa565b600061266b82613c06565b905061267682613cbf565b6126cf57818260405160200161268e91815260200190565b60408051601f19818403018152908290527f41e713ad0000000000000000000000000000000000000000000000000000000082526102909291600401615131565b919050565b60006126e08585612911565b905060006126fd828560ff166028026038011c64ffffffffff1690565b9050610b5f8686866127168764ffffffffff8716614f94565b604080516000815260208101909152889088612d11565b600061273882613da1565b9050806126cf57818260405160200161268e91815260200190565b600061275f8585612911565b9050600061277c828560ff166028026038011c64ffffffffff1690565b9050610b5f8686866000858888612d11565b600082826040516020016127a392919061514a565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561281f5761280b60ff601b83900360080287901c16836145da565b91508061281781614f61565b9150506127e9565b509392505050565b60006020821061284d5760208204840193506020828161284957612849615185565b0691505b508254600882021b60208290038084111561281f576001850154600882021c82179150509392505050565b6000600861288860026020614f94565b612892919061519b565b9190911c919050565b6060816000036128ba5750604080516020810190915260008152610a3d565b60006128c6858561278e565b9050610c5381600085613127565b600060086001806128e760026020614f94565b6128f19190614f94565b6128fb9190614f94565b612905919061519b565b8260ff911c1692915050565b6000610a3d6129208484613e5a565b5490565b6000838360405160200161293992919061514a565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b8215612a2d57602083106129ce576020830484019350602083816129ca576129ca615185565b0692505b8215612a2d5760208390036000818410156129f25750600019600884021c196129fd565b50600019600882021c195b8554600886021b811984511682821617845250818411612a1e575050611aa0565b50600194909401939182900391015b5b60208210612a4f5783548152600190930192601f1990910190602001612a2e565b8115611aa0576000600019600884021c198251865482169119161782525050505050565b602081015160408201516000905b9050915091565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110612ac257612ac2614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b730000000000000000000000000000000000000000006030830152600091612b3f91015b604051602081830303815290604052612b379061459d565b836000611ae1565b9050610807612b518260008451613eb0565b613f40565b60008160ff1682612b678560581c90565b1660ff1614905092915050565b60006060600080612b8486613f51565b90925090506001600160a01b038216612bd55785612ba1876123e1565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610290929190615131565b80612be457612be48689611a3f565b8615612c30577dffffffffffffffffffffffffffff000000000000000000000000000000008616616e7360f01b176000612c1d82610731565b9050612c2d8261025f8b846145da565b50505b6000612c3c8760101b90565b7fffffffffffffffffffffffffffff0000000000000000000000000000000000001614612c7457612c6f88888488614035565b612c80565b612c80888884886140ad565b90999098509650505050505050565b6000600860016128f160026020614f94565b6060610c53612cb0868661278e565b612cba84866127e4565b60ff868116601b0360080286901c16613127565b6000612d01616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008516178361410e565b80610a3d5750610a3d838361410e565b613a3160f11b877fffff0000000000000000000000000000000000000000000000000000000000001614612d9b57613a3160f11b8788604051602001612d5991815260200190565b60408051601f19818403018152908290527f31b466830000000000000000000000000000000000000000000000000000000082526102909392916004016151b2565b6000612db6828760ff166028026038011c64ffffffffff1690565b9050600083518564ffffffffff1683612dcf9190614f94565b612dd991906145da565b9050808214158015612dfb575081612df186886151f3565b64ffffffffff1614155b15612e4b576040517fa65010b400000000000000000000000000000000000000000000000000000000815264ffffffffff8088166004830152808716602483015283166044820152606401610290565b818664ffffffffff161115612e9c576040517f7e8578d30000000000000000000000000000000000000000000000000000000081526004810183905264ffffffffff87166024820152604401610290565b6000612ea98489846141e0565b90506000612eb68b613aae565b905060005b8151811015612f8b576000828281518110612ed857612ed8614ed9565b60200260200101519050612f046010826affffffffffffffffffffff1916612b5690919063ffffffff16565b15612f7857606081901c6001600160a01b03166355eb5a288e8e8e8e8e8d8f6040518863ffffffff1660e01b8152600401612f459796959493929190615218565b600060405180830381600087803b158015612f5f57600080fd5b505af1158015612f73573d6000803e3d6000fd5b505050505b5080612f8381614f61565b915050612ebb565b5064ffffffffff881660005b8a60ff168160ff161015612fca57612fbe878260ff166028026038011c64ffffffffff1690565b90910190600101612f97565b508b7faa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b48c838b878c604051613003959493929190615276565b60405180910390a25082841461302457600061301f8c8c613e5a565b839055505b60006130318c8c8c612924565b9050613045818a64ffffffffff1689613b49565b5060005b815181101561311957600082828151811061306657613066614ed9565b602002602001015190506130926020826affffffffffffffffffffff1916612b5690919063ffffffff16565b1561310657606081901c6001600160a01b031663635845338e8e8e8e8e8a8f6040518863ffffffff1660e01b81526004016130d39796959493929190615218565b600060405180830381600087803b1580156130ed57600080fd5b505af1158015613101573d6000803e3d6000fd5b505050505b508061311181614f61565b915050613049565b505050505050505050505050565b60405160208101601f19603f848401011660405282825261281f858585846129a4565b7f6f74000000000000000000000000000000000000000000000000000000000000867fffff00000000000000000000000000000000000000000000000000000000000016036131d657857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9868686866040516131c994939291906152bc565b60405180910390a2610b5f565b60006131e187613aae565b905060005b81518110156132c457600082828151811061320357613203614ed9565b6020026020010151905061322f6001826affffffffffffffffffffff1916612b5690919063ffffffff16565b156132b1576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c9061327e908c908c908c908c908c908c906004016152fb565b600060405180830381600087803b15801561329857600080fd5b505af11580156132ac573d6000803e3d6000fd5b505050505b50806132bc81614f61565b9150506131e6565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9878787876040516132fb94939291906152bc565b60405180910390a2600061330f888861278e565b905060006020870190506133278260008951846142ae565b6000613332856128d4565b11156133b65760006133448a8a613e5a565b878155905060208601915060008060005b61335e886128d4565b8160ff1610156133b1576133738d8d83612924565b925061338e8a8260ff166028026038011c64ffffffffff1690565b915061339d83600084886142ae565b6133a782866145da565b9450600101613355565b505050505b60005b83518110156134975760008482815181106133d6576133d6614ed9565b602002602001015190506134026002826affffffffffffffffffffff1916612b5690919063ffffffff16565b15613484576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90613451908e908e908e908e908e908e906004016152fb565b600060405180830381600087803b15801561346b57600080fd5b505af115801561347f573d6000803e3d6000fd5b505050505b508061348f81614f61565b9150506133b9565b50505050505050505050565b60408051602081018490529081018290526000906060016127a3565b7f6f74000000000000000000000000000000000000000000000000000000000000837fffff000000000000000000000000000000000000000000000000000000000000160361354557827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d07836040516135389190615354565b60405180910390a2505050565b600061355084613aae565b905060005b815181101561362d57600082828151811061357257613572614ed9565b6020026020010151905061359e6040826affffffffffffffffffffff1916612b5690919063ffffffff16565b1561361a576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf45906135e790899089908990600401615367565b600060405180830381600087803b15801561360157600080fd5b505af1158015613615573d6000803e3d6000fd5b505050505b508061362581614f61565b915050613555565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d078460405161365e9190615354565b60405180910390a26000613672858561278e565b90506136cb81600061368386612878565b67ffffffffffffffff81111561369b5761369b61499c565b6040519080825280601f01601f1916602001820160405280156136c5576020820181803683370190505b50613b49565b60006136d6846128d4565b11156136f75760006136e88686613e5a565b90506136f581602061436e565b505b60005b8251811015610b5f57600083828151811061371757613717614ed9565b602002602001015190506137436080826affffffffffffffffffffff1916612b5690919063ffffffff16565b156137bf576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b9061378c908a908a908a90600401615367565b600060405180830381600087803b1580156137a657600080fd5b505af11580156137ba573d6000803e3d6000fd5b505050505b50806137ca81614f61565b9150506136fa565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201526000602282018190527f756e6c696d697465640000000000000000000000000000000000000000000000603083015291016040516020818303038152906040526138459061459d565b909114919050565b600061080782611b018686612911565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061389657613896614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d6573706163654f776e657200000000000000000000000000000000000060308301526000916138f791016125d8565b60601c949350505050565b61390c82826143ab565b611200576040517f74b5e6ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526001600160e01b031982166024820152604401610290565b6060600080610a55878787876140ad565b604080516002808252606082018352600092602083019080368337019050509050836fffffffffffffffffffffffffffffffff1916816000815181106139b6576139b6614ed9565b60200260200101818152505082816001815181106139d6576139d6614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f496e7374616c6c65644d6f64756c65730000000000000000000000000000000060308201528151808203909301835281019052611aa090613a429061459d565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006116d9565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613ae857613ae8614ed9565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b73000000000000000000000000000000000000000000006030830152600091612b3f9101612b1f565b6108fc83838351613b5a8560200190565b6142ae565b6000613b6d607060106145da565b9190911b919050565b606060005b6010811015613bd6576fffffffffffffffffffffffffffffffff198316600882021b7fff000000000000000000000000000000000000000000000000000000000000001615613bd65780613bce81614f61565b915050613b7b565b604080516fffffffffffffffffffffffffffffffff19851660208201528151603090910190915281815280610807565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613c3f57613c3f614ed9565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b6022820152655461626c657360d01b6030820152815180820390930183528101905260009061080790613c979061459d565b8360017e600302202020000000000000000000000000000000000000000000000000006116ac565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613cf857613cf8614ed9565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f757263654964730000000000000000000000000000000000000000006030830152600091613d9591015b604051602081830303815290604052613d6d9061459d565b8360007e010100010000000000000000000000000000000000000000000000000000006116ac565b90506108078160f81c90565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110613dda57613dda614ed9565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b6022820152655461626c657360d01b6030820152815180820390930183528101905260009061080790613e329061459d565b8360027e600302202020000000000000000000000000000000000000000000000000006116ac565b60008282604051602001613e6f92919061514a565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000818311158015613ec3575083518211155b613eff578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161029093929190615390565b60208401613f0d84826145da565b90506000613f1b8585614f94565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000610a3d83601560006143c7565b60408051600180825281830190925260009182918291602080830190803683370190505090508381600081518110613f8b57613f8b614ed9565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000908190819061402490613ffe9061459d565b857e150200140100000000000000000000000000000000000000000000000000006116ee565b925092509250610a04838383614442565b60006060836001600160a01b0316600061405085898961444e565b60405161405d91906153b5565b60006040518083038185875af1925050503d806000811461409a576040519150601f19603f3d011682016040523d82523d6000602084013e61409f565b606091505b509097909650945050505050565b60006060836001600160a01b03166140c684888861444e565b6040516140d391906153b5565b600060405180830381855af49150503d806000811461409a576040519150601f19603f3d011682016040523d82523d6000602084013e61409f565b60408051600280825260608201835260009283929190602083019080368337019050509050838160008151811061414757614147614ed9565b602002602001018181525050826001600160a01b031660001b8160018151811061417357614173614ed9565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f7572636541636365737300000000000000000000000000000000000060308301526000916141d49101613d55565b9050610c538160f81c90565b600064ffffffffff821115614224576040517f4767058800000000000000000000000000000000000000000000000000000000815260048101839052602401610290565b8366ffffffffffffff811660ff851660280260380182901c64ffffffffff16808510614256578085038201915061425e565b848103820391505b5064ffffffffff6038602860ff8816020181811b197fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009490941690921792909216918416901b1790509392505050565b821561432857602083106142d8576020830484019350602083816142d4576142d4615185565b0692505b82156143285760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411614319575050611aa0565b50600194909401939182900391015b5b6020821061434a5780518455600190930192601f1990910190602001614329565b8115611aa0576000600019600884021c198554835182169119161785555050505050565b6000602061437d83601f6145da565b61438791906153d1565b61439190846145da565b90505b808310156108fc5760008355600183019250614394565b60006143b68361447d565b8015610a3d5750610a3d83836144c9565b606060006143d58560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816143fb576143fb615185565b04905060405193506020840160208202810160405281855260005b82811015614436578451871c825293870193602090910190600101614416565b50505050509392505050565b60008061180285614581565b6060838383604051602001614465939291906153f3565b60405160208183030381529060405290509392505050565b60006144a9827f01ffc9a7000000000000000000000000000000000000000000000000000000006144c9565b8015610eb357506144c2826001600160e01b03196144c9565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d9150600051905082801561456a575060208210155b80156145765750600081115b979650505050505050565b6020810151603482015160609190911c9060009060f81c612a81565b805160208083015191908110156145be576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610eb357610eb36145c4565b60008083601f8401126145ff57600080fd5b50813567ffffffffffffffff81111561461757600080fd5b6020830191508360208260051b850101111561463257600080fd5b9250929050565b803560ff811681146126cf57600080fd5b60008060008060006080868803121561466257600080fd5b85359450602086013567ffffffffffffffff81111561468057600080fd5b61468c888289016145ed565b909550935061469f905060408701614639565b949793965091946060013592915050565b60005b838110156146cb5781810151838201526020016146b3565b50506000910152565b600081518084526146ec8160208601602086016146b0565b601f01601f19169290920160200192915050565b602081526000610a3d60208301846146d4565b60008083601f84011261472557600080fd5b50813567ffffffffffffffff81111561473d57600080fd5b60208301915083602082850101111561463257600080fd5b6000806000806000806080878903121561476e57600080fd5b86359550602087013567ffffffffffffffff8082111561478d57600080fd5b6147998a838b016145ed565b90975095508591506147ad60408a01614639565b945060608901359150808211156147c357600080fd5b506147d089828a01614713565b979a9699509497509295939492505050565b600080600080606085870312156147f857600080fd5b84359350602085013567ffffffffffffffff81111561481657600080fd5b614822878288016145ed565b9094509250614835905060408601614639565b905092959194509250565b60008060008060008060008060a0898b03121561485c57600080fd5b88359750602089013567ffffffffffffffff8082111561487b57600080fd5b6148878c838d016145ed565b909950975060408b01359150808211156148a057600080fd5b6148ac8c838d01614713565b909750955060608b0135945060808b01359150808211156148cc57600080fd5b506148d98b828c01614713565b999c989b5096995094979396929594505050565b600080600080600080600060a0888a03121561490857600080fd5b87359650602088013567ffffffffffffffff8082111561492757600080fd5b6149338b838c016145ed565b909850965086915061494760408b01614639565b955060608a013591508082111561495d57600080fd5b5061496a8a828b01614713565b989b979a50959894979596608090950135949350505050565b60006020828403121561499557600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156149db576149db61499c565b604052919050565b600082601f8301126149f457600080fd5b813567ffffffffffffffff811115614a0e57614a0e61499c565b614a216020601f19601f840116016149b2565b818152846020838601011115614a3657600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215614a6657600080fd5b82359150602083013567ffffffffffffffff811115614a8457600080fd5b614a90858286016149e3565b9150509250929050565b60008060008060608587031215614ab057600080fd5b84359350602085013567ffffffffffffffff811115614ace57600080fd5b614ada878288016145ed565b9598909750949560400135949350505050565b606081526000614b0060608301866146d4565b8460208401528281036040840152610a6781856146d4565b600082601f830112614b2957600080fd5b8135602067ffffffffffffffff821115614b4557614b4561499c565b8160051b614b548282016149b2565b9283528481018201928281019087851115614b6e57600080fd5b83870192505b8483101561457657823582529183019190830190614b74565b600080600080600060a08688031215614ba557600080fd5b85359450602086013567ffffffffffffffff811115614bc357600080fd5b614bcf88828901614b18565b945050614bde60408701614639565b94979396509394606081013594506080013592915050565b600080600060408486031215614c0b57600080fd5b83359250602084013567ffffffffffffffff811115614c2957600080fd5b614c35868287016145ed565b9497909650939450505050565b6001600160a01b03811681146114d557600080fd5b600080600060608486031215614c6c57600080fd5b8335614c7781614c42565b925060208401359150604084013567ffffffffffffffff811115614c9a57600080fd5b614ca6868287016149e3565b9150509250925092565b60008060008060808587031215614cc657600080fd5b84359350602085013567ffffffffffffffff811115614ce457600080fd5b614cf087828801614b18565b935050614cff60408601614639565b9396929550929360600135925050565b600080600060608486031215614d2457600080fd5b83359250602084013567ffffffffffffffff811115614d4257600080fd5b614d4e86828701614b18565b925050614d5d60408501614639565b90509250925092565b60008060408385031215614d7957600080fd5b8235614d8481614c42565b9150602083013567ffffffffffffffff811115614a8457600080fd5b60008060008060008060808789031215614db957600080fd5b86359550602087013567ffffffffffffffff80821115614dd857600080fd5b614de48a838b016145ed565b90975095506040890135915065ffffffffffff82168214614e0457600080fd5b909350606088013590808211156147c357600080fd5b803564ffffffffff811681146126cf57600080fd5b60008060008060008060008060c0898b031215614e4b57600080fd5b88359750602089013567ffffffffffffffff80821115614e6a57600080fd5b614e768c838d016145ed565b9099509750879150614e8a60408c01614639565b9650614e9860608c01614e1a565b9550614ea660808c01614e1a565b945060a08b01359150808211156148cc57600080fd5b600060208284031215614ece57600080fd5b8135610a3d81614c42565b634e487b7160e01b600052603260045260246000fd5b604081526000614f0260408301856146d4565b90506001600160a01b03831660208301529392505050565b600060ff821660ff8103614f3057614f306145c4565b60010192915050565b6001600160a01b0384168152826020820152606060408201526000610c5360608301846146d4565b60006000198203614f7457614f746145c4565b5060010190565b60ff8281168282160390811115610eb357610eb36145c4565b81810381811115610eb357610eb36145c4565b600060208284031215614fb957600080fd5b81518015158114610a3d57600080fd5b600060208284031215614fdb57600080fd5b81516fffffffffffffffffffffffffffffffff1981168114610a3d57600080fd5b600081518084526020808501945080840160005b8381101561502c57815187529582019590820190600101615010565b509495945050505050565b60608152600061504a6060830186614ffc565b65ffffffffffff851660208401528281036040840152610a6781856146d4565b8481526080602082015260006150836080830186614ffc565b65ffffffffffff85166040840152828103606084015261457681856146d4565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516151048160038601602089016146b0565b8084019050816003820152845191506151248260048301602088016146b0565b0160040195945050505050565b82815260406020820152600061080760408301846146d4565b82815260006020808301845182860160005b828110156151785781518452928401929084019060010161515c565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b8082028115828204841417610eb357610eb36145c4565b7fffff00000000000000000000000000000000000000000000000000000000000084168152826020820152606060408201526000610c5360608301846146d4565b64ffffffffff818116838216019080821115615211576152116145c4565b5092915050565b87815260e06020820152600061523160e0830189614ffc565b60ff8816604084015264ffffffffff87811660608501528616608084015260a0830185905282810360c084015261526881856146d4565b9a9950505050505050505050565b60a08152600061528960a0830188614ffc565b65ffffffffffff8716602084015264ffffffffff861660408401528460608401528281036080840152611eb381856146d4565b6080815260006152cf6080830187614ffc565b82810360208401526152e181876146d4565b9050846040840152828103606084015261457681856146d4565b86815260c06020820152600061531460c0830188614ffc565b828103604084015261532681886146d4565b9050856060840152828103608084015261534081866146d4565b9150508260a0830152979650505050505050565b602081526000610a3d6020830184614ffc565b8381526060602082015260006153806060830185614ffc565b9050826040830152949350505050565b6060815260006153a360608301866146d4565b60208301949094525060400152919050565b600082516153c78184602087016146b0565b9190910192915050565b6000826153ee57634e487b7160e01b600052601260045260246000fd5b500490565b600084516154058184602089016146b0565b60609490941b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190930190815260148101919091526034019291505056fea164736f6c6343000815000a60c0604052604051620000129062000088565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b03166080526040516200004a9062000096565b604051809103906000f08015801562000067573d6000803e3d6000fd5b506001600160a01b031660a0523480156200008157600080fd5b50620000a4565b61087d8062002ad783390190565b612709806200335483390190565b60805160a0516129ff620000d8600039600081816103ed015261075c0152600081816104fa01526108b101526129ff6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806317d7de7c1161005b57806317d7de7c146100df57806345ec9354146100f65780637c5b033514610109578063e1af802c1461011c57600080fd5b806301ffc9a714610082578063119df25f146100aa57806313861fb5146100ca575b600080fd5b6100956100903660046124be565b610124565b60405190151581526020015b60405180910390f35b6100b2610209565b6040516001600160a01b0390911681526020016100a1565b6100dd6100d8366004612516565b610218565b005b604051651c1d5c1c195d60d21b81526020016100a1565b604051601f1936013581526020016100a1565b6100dd610117366004612516565b61055f565b6100b2610987565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780ac2fc0000000000000000000000000000000000000000000000000000000014806101b757507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b8061020357507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000610213610991565b905090565b6000610222610987565b6040517f6e730000000000000000000000000000000000000000000000000000000000006020820152651c1d5c1c195d60d21b60228201529091506001600160a01b0382169063b29e408990603001604051602081830303815290604052610289906125c7565b6040518263ffffffff1660e01b81526004016102a791815260200190565b600060405180830381600087803b1580156102c157600080fd5b505af11580156102d5573d6000803e3d6000fd5b505060408051613a3160f11b6020820152651c1d5c1c195d60d21b60228201527f5075707065745265676973747279000000000000000000000000000000000000603082015261034193500190505b60405160208183030381529060405261033c906125c7565b6109c3565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526001600160a01b03831691633350b6a991016040516020818303038152906040526103af906125c7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260016044820152606401600060405180830381600087803b15801561043657600080fd5b505af115801561044a573d6000803e3d6000fd5b50506040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201526001600160a01b0385169350633350b6a99250016040516020818303038152906040526104bc906125c7565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016602482015260016044820152606401600060405180830381600087803b15801561054357600080fd5b505af1158015610557573d6000803e3d6000fd5b505050505050565b6000610569610987565b6040517f6e730000000000000000000000000000000000000000000000000000000000006020820152651c1d5c1c195d60d21b602282015290915060009081906001600160a01b03841690819063b29e4089906030016040516020818303038152906040526105d7906125c7565b6040516024016105e991815260200190565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b939093179092529051610636925061260f565b600060405180830381855af49150503d8060008114610671576040519150601f19603f3d011682016040523d82523d6000602084013e610676565b606091505b5091509150816106895761068981610a0f565b60408051613a3160f11b6020820152651c1d5c1c195d60d21b60228201527f507570706574526567697374727900000000000000000000000000000000000060308201526106d79101610324565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f466163746f72790000000000000000000000000000000000000000000000000060308201526001600160a01b038516918291633350b6a99101604051602081830303815290604052610747906125c7565b60405160248101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660448201526001606482015260840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516107d8925061260f565b600060405180830381855af49150503d8060008114610813576040519150601f19603f3d011682016040523d82523d6000602084013e610818565b606091505b5090925090508161082c5761082c81610a0f565b6040805161737960f01b6020820152651c1d5c1c195d60d21b60228201527f44656c65676174696f6e0000000000000000000000000000000000000000000060308201526001600160a01b038516918291633350b6a9910160405160208183030381529060405261089c906125c7565b60405160248101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660448201526001606482015260840160408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b93909317909252905161092d925061260f565b600060405180830381855af49150503d8060008114610968576040519150601f19603f3d011682016040523d82523d6000602084013e61096d565b606091505b509092509050816109815761098181610a0f565b50505050565b6000610213610a17565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806109c05750335b90565b610a0c817e140100140000000000000000000000000000000000000000000000000000006109ef610a56565b6109f7610ace565b6109ff610b08565b610a07610b8d565b610bed565b50565b805160208201fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e175546000906001600160a01b031680610a51573391505090565b919050565b60408051600180825281830190925260009182919060208083019080368337019050509050605f81600081518110610a9057610a9061262b565b602002602001019060c5811115610aa957610aa9612641565b908160c5811115610abc57610abc612641565b905250610ac881610ca7565b91505090565b60408051600180825281830190925260009182919060208083019080368337019050509050606181600081518110610a9057610a9061262b565b604080516001808252818301909252606091816020015b6060815260200190600190039081610b1f5790505090506040518060400160405280600881526020017f73797374656d496400000000000000000000000000000000000000000000000081525081600081518110610b7f57610b7f61262b565b602002602001018190525090565b604080516001808252818301909252606091816020015b6060815260200190600190039081610ba4579050509050604051806040016040528060068152602001651c1d5c1c195d60d21b81525081600081518110610b7f57610b7f61262b565b6000610bf7610a17565b9050306001600160a01b03821603610c1c57610c17878787878787610e6b565b610c9e565b6040517f0ba51f490000000000000000000000000000000000000000000000000000000081526001600160a01b03821690630ba51f4990610c6b908a908a908a908a908a908a906004016126d5565b600060405180830381600087803b158015610c8557600080fd5b505af1158015610c99573d6000803e3d6000fd5b505050505b50505050505050565b6000601c82511115610cda578151604051635318beb960e01b8152600401610cd191815260200190565b60405180910390fd5b60008080805b8551811015610db5576000610d1e878381518110610d0057610d0061262b565b602002602001015160c5811115610d1957610d19612641565b611156565b905080600003610d3357600190920191610d6b565b8215610d6b576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80840193506008826004601f030302878381518110610d8c57610d8c61262b565b602002602001015160c5811115610da557610da5612641565b901b949094179350600101610ce0565b506005811115610ddb57604051635318beb960e01b815260048101829052602401610cd1565b84518190036008610dee60026020612735565b610df89190612748565b83901b939093179260086001610e1060026020612735565b610e1a9190612735565b610e249190612748565b81901b93909317926008600180610e3d60026020612735565b610e479190612735565b610e519190612735565b610e5b9190612748565b9190911b92909217949350505050565b613a3160f11b867fffff0000000000000000000000000000000000000000000000000000000000001614801590610ee457507f6f74000000000000000000000000000000000000000000000000000000000000867fffff0000000000000000000000000000000000000000000000000000000000001614155b15610f4557613a3160f11b8687604051602001610f0391815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252610cd193929160040161275f565b610f4e856111b6565b610f5984600161133e565b610f6483600061133e565b60e084901c60e885901c0160ff16825114610fc45760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b60e085901c60e886901c0160ff168151146110245760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff161461109c5760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610cd1565b6110a5866114e5565b156110ff5785866040516020016110be91815260200190565b60408051601f19818403018152908290527fdfaaf9cf000000000000000000000000000000000000000000000000000000008252610cd192916004016127a0565b61114b868686868660405160200161111791906127b9565b6040516020818303038152906040528660405160200161113791906127b9565b6040516020818303038152906040526115c9565b6105578660016116e9565b6000808260c581111561116b5761116b612641565b60ff169050606181101561118557601f1660010192915050565b60618360c581111561119957611199612641565b036111a75750601492915050565b50600092915050565b50919050565b806111ed576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006111f8826117e0565b9050600581111561123f576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401610cd1565b600061124a8361181d565b9050600061125883836127cc565b9050601c81111561129f576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401610cd1565b60005b828110156113375760ff601b82900360080286901c1660008190036112f3576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081111561132e576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016112a2565b5050505050565b8015801561134a575081155b1561136b57604051635318beb960e01b815260006004820152602401610cd1565b6000611376836117e0565b9050600581111561139d57604051635318beb960e01b815260048101829052602401610cd1565b60006113a88461181d565b905060006113b683836127cc565b9050601c8111156113dd57604051635318beb960e01b815260048101829052602401610cd1565b60008060005b8381101561149e57600061140b6113fa8a8461182f565b60c5811115610d1957610d19612641565b11156114555784811061144a576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600190920191611496565b8481101561148f576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b6001016113e3565b508382146114c257604051635318beb960e01b815260048101839052602401610cd1565b848114610c9e57604051635318beb960e01b815260048101829052602401610cd1565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061151e5761151e61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526000906115b59061158d906125c7565b8360007e01010001000000000000000000000000000000000000000000000000000000611857565b90506115c18160f81c90565b949350505050565b604080516020810187905280820186905260608082018690528251808303909101815260809091019091526000611600848461188d565b9050600061160e85856118aa565b604080516001808252818301909252919250600091906020808301908036833701905050905089816000815181106116485761164861262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526116dd906116b4906125c7565b828686867e600302202020000000000000000000000000000000000000000000000000006118d6565b50505050505050505050565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061171f5761171f61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526117db9061178b906125c7565b826000856040516020016117a691151560f81b815260010190565b60408051601f198184030181529190527e01010001000000000000000000000000000000000000000000000000000000611c23565b505050565b600060086001806117f360026020612735565b6117fd9190612735565b6118079190612735565b6118119190612748565b8260ff911c1692915050565b6000600860016117fd60026020612735565b6000601b8290036008028360ff911c1660c581111561185057611850612641565b9392505050565b60006118846118668686611c38565b60ff858116601b0360080285901c1661187f8587611c8e565b611cd1565b95945050505050565b8151815160009181810160389190911b1760609190911b17611850565b606082826040516020016118bf9291906127df565b604051602081830303815290604052905092915050565b7f6f74000000000000000000000000000000000000000000000000000000000000867fffff000000000000000000000000000000000000000000000000000000000000160361196257857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a9868686866040516119559493929190612849565b60405180910390a2610557565b600061196d87611d22565b905060005b8151811015611a5057600082828151811061198f5761198f61262b565b602002602001015190506119bb6001826affffffffffffffffffffff1916611dea90919063ffffffff16565b15611a3d576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90611a0a908c908c908c908c908c908c90600401612893565b600060405180830381600087803b158015611a2457600080fd5b505af1158015611a38573d6000803e3d6000fd5b505050505b5080611a48816128ec565b915050611972565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051611a879493929190612849565b60405180910390a26000611a9b8888611c38565b90506000602087019050611ab3826000895184611e08565b6000611abe856117e0565b1115611b42576000611ad08a8a611ec8565b878155905060208601915060008060005b611aea886117e0565b8160ff161015611b3d57611aff8d8d83611f1e565b9250611b1a8a8260ff166028026038011c64ffffffffff1690565b9150611b298360008488611e08565b611b3382866127cc565b9450600101611ae1565b505050505b60005b83518110156116dd576000848281518110611b6257611b6261262b565b60200260200101519050611b8e6002826affffffffffffffffffffff1916611dea90919063ffffffff16565b15611c10576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90611bdd908e908e908e908e908e908e90600401612893565b600060405180830381600087803b158015611bf757600080fd5b505af1158015611c0b573d6000803e3d6000fd5b505050505b5080611c1b816128ec565b915050611b45565b6113378585611c328487611c8e565b85611f9e565b60008282604051602001611c4d929190612906565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff16811015611cc957611cb560ff601b83900360080287901c16836127cc565b915080611cc1816128ec565b915050611c93565b509392505050565b600060208210611cf757602082048401935060208281611cf357611cf3612941565b0691505b508254600882021b602082900380841115611cc9576001850154600882021c82179150509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110611d5c57611d5c61262b565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090611dd390611dcb906125c7565b83600061224d565b90506115c1611de58260008451612287565b612317565b60008160ff1682611dfb8560581c90565b1660ff1614905092915050565b8215611e825760208310611e3257602083048401935060208381611e2e57611e2e612941565b0692505b8215611e825760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411611e73575050610981565b50600194909401939182900391015b5b60208210611ea45780518455600190930192601f1990910190602001611e83565b8115610981576000600019600884021c198554835182169119161785555050505050565b60008282604051602001611edd929190612906565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b60008383604051602001611f33929190612906565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff000000000000000000000000000000000000000000000000000000000000160361202857837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161201b93929190612957565b60405180910390a2610981565b60006120348585611c38565b9050600061204186611d22565b905060005b81518110156121205760008282815181106120635761206361262b565b6020026020010151905061208f6004826affffffffffffffffffffff1916611dea90919063ffffffff16565b1561210d576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d906120da908b908b908b908b90600401612994565b600060405180830381600087803b1580156120f457600080fd5b505af1158015612108573d6000803e3d6000fd5b505050505b5080612118816128ec565b915050612046565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be86868660405161215593929190612957565b60405180910390a2612170828565ffffffffffff1685612328565b60005b8151811015610c9e5760008282815181106121905761219061262b565b602002602001015190506121bc6008826affffffffffffffffffffff1916611dea90919063ffffffff16565b1561223a576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190612207908b908b908b908b90600401612994565b600060405180830381600087803b15801561222157600080fd5b505af1158015612235573d6000803e3d6000fd5b505050505b5080612245816128ec565b915050612173565b60606115c161225d858585611f1e565b60006122828561226d898961233e565b9060ff166028026038011c64ffffffffff1690565b612351565b600081831115801561229a575083518211155b6122d6578383836040517f23230fa3000000000000000000000000000000000000000000000000000000008152600401610cd1939291906129cd565b602084016122e484826127cc565b905060006122f28585612735565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006118508360156000612374565b6117db838383516123398560200190565b611e08565b600061185061234d8484611ec8565b5490565b60405160208101601f19603f8484010116604052828252611cc9858585846123ef565b606060006123828560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816123a8576123a8612941565b04905060405193506020840160208202810160405281855260005b828110156123e3578451871c8252938701936020909101906001016123c3565b50505050509392505050565b821561247857602083106124195760208304840193506020838161241557612415612941565b0692505b821561247857602083900360008184101561243d5750600019600884021c19612448565b50600019600882021c195b8554600886021b811984511682821617845250818411612469575050610981565b50600194909401939182900391015b5b6020821061249a5783548152600190930192601f1990910190602001612479565b8115610981576000600019600884021c198251865482169119161782525050505050565b6000602082840312156124d057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461185057600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561252857600080fd5b813567ffffffffffffffff8082111561254057600080fd5b818401915084601f83011261255457600080fd5b81358181111561256657612566612500565b604051601f8201601f19908116603f0116810190838211818310171561258e5761258e612500565b816040528281528760208487010111156125a757600080fd5b826020860160208301376000928101602001929092525095945050505050565b805160208083015191908110156111b05760001960209190910360031b1b16919050565b60005b838110156126065781810151838201526020016125ee565b50506000910152565b600082516126218184602087016125eb565b9190910192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000815180845261266f8160208601602086016125eb565b601f01601f19169290920160200192915050565b6000815180845260208085019450848260051b860182860160005b858110156126c85783830389526126b6838351612657565b9885019892509084019060010161269e565b5090979650505050505050565b86815285602082015284604082015283606082015260c06080820152600061270060c0830185612683565b82810360a08401526127128185612683565b9998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156102035761020361271f565b80820281158282048414176102035761020361271f565b7fffff000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006118846060830184612657565b8281526040602082015260006115c16040830184612657565b6020815260006118506020830184612683565b808201808211156102035761020361271f565b600083516127f18184602088016125eb565b8351908301906128058183602088016125eb565b01949350505050565b600081518084526020808501945080840160005b8381101561283e57815187529582019590820190600101612822565b509495945050505050565b60808152600061285c608083018761280e565b828103602084015261286e8187612657565b905084604084015282810360608401526128888185612657565b979650505050505050565b86815260c0602082015260006128ac60c083018861280e565b82810360408401526128be8188612657565b905085606084015282810360808401526128d88186612657565b9150508260a0830152979650505050505050565b600060001982036128ff576128ff61271f565b5060010190565b82815260006020808301845182860160005b8281101561293457815184529284019290840190600101612918565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b60608152600061296a606083018661280e565b65ffffffffffff85166020840152828103604084015261298a8185612657565b9695505050505050565b8481526080602082015260006129ad608083018661280e565b65ffffffffffff8516604084015282810360608401526128888185612657565b6060815260006129e06060830186612657565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b5061085d806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c80631a86b550116100505780631a86b550146100c157806345ec9354146100d4578063e1af802c146100e757600080fd5b806301ffc9a71461006c578063119df25f14610094575b600080fd5b61007f61007a3660046105c6565b6100ef565b60405190151581526020015b60405180910390f35b61009c6101d4565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b61007f6100cf366004610625565b6101e3565b604051601f19360135815260200161008b565b61009c6102c2565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167faf58547700000000000000000000000000000000000000000000000000000000148061018257507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b806101ce57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101de6102cc565b905090565b6000806101ee6101d4565b604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f5075707065745265676973747279000000000000000000000000000000000000603082015291925073ffffffffffffffffffffffffffffffffffffffff8316916102a2910160405160208183030381529060405261029c9061070b565b866102fe565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60006101de61037b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102fb5750335b90565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061033757610337610732565b6020908102919091010152600061036f8583837e140100140000000000000000000000000000000000000000000000000000006103c7565b60601c95945050505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff16806103c2573391505090565b919050565b6000806103d261037b565b90503073ffffffffffffffffffffffffffffffffffffffff821603610405576103fd868686866104a6565b91505061049e565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d599061045d908990899089908990600401610748565b602060405180830381865afa15801561047a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103fd91906107a3565b949350505050565b60006104d36104b586866104dc565b60ff858116601b0360080285901c166104ce8587610532565b610575565b95945050505050565b600082826040516020016104f19291906107bc565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561056d5761055960ff601b83900360080287901c168361080d565b91508061056581610820565b915050610537565b509392505050565b60006020821061059b576020820484019350602082816105975761059761083a565b0691505b508254600882021b60208290038084111561056d576001850154600882021c82179150509392505050565b6000602082840312156105d857600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461060857600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60008060006060848603121561063a57600080fd5b833573ffffffffffffffffffffffffffffffffffffffff8116811461065e57600080fd5b925060208401359150604084013567ffffffffffffffff8082111561068257600080fd5b818601915086601f83011261069657600080fd5b8135818111156106a8576106a861060f565b604051601f8201601f19908116603f011681019083821181831017156106d0576106d061060f565b816040528281528960208487010111156106e957600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b8051602080830151919081101561072c576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156107895784518352938301939183019160010161076d565b505060ff9690961660408501525050506060015292915050565b6000602082840312156107b557600080fd5b5051919050565b82815260006020808301845182860160005b828110156107ea578151845292840192908401906001016107ce565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101ce576101ce6107f7565b60006000198203610833576108336107f7565b5060010190565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000a608060405234801561001057600080fd5b506126e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100675760003560e01c806345ec93541161005057806345ec9354146100c1578063b9eb8bfb146100d4578063e1af802c146100e757600080fd5b806301ffc9a71461006c578063119df25f14610094575b600080fd5b61007f61007a366004611297565b6100ef565b60405190151581526020015b60405180910390f35b61009c610188565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161008b565b604051601f19360135815260200161008b565b61009c6100e23660046112d9565b610197565b61009c6102a0565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000148061018257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101926102aa565b905090565b60006101aa826101a5610188565b6102dc565b6101b26102a0565b826040516101bf9061128a565b73ffffffffffffffffffffffffffffffffffffffff90921682526020820152604001604051809103906000f0801580156101fd573d6000803e3d6000fd5b50604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f5075707065745265676973747279000000000000000000000000000000000000603082015291925061029b9101604051602081830303815290604052610294906112f2565b83836103a4565b919050565b6000610192610464565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102d95750335b90565b73ffffffffffffffffffffffffffffffffffffffff811661033e7f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff000000000000000000000000000000008516176104ab565b73ffffffffffffffffffffffffffffffffffffffff16146103a057610362826105b9565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610397929190611369565b60405180910390fd5b5050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106103da576103da6113a1565b60200260200101818152505061045e8482600085604051602001610429919060609190911b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815260140190565b60408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006106f6565b50505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff168061029b573391505090565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106104e4576104e46113a1565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906105ae90610586906112f2565b8360007e140100140000000000000000000000000000000000000000000000000000006107c6565b60601c949350505050565b606081601081901b60006105cc836108a5565b9050827fffffffffffffffffffffffffffff000000000000000000000000000000000000831615610627576106227fffffffffffffffffffffffffffff00000000000000000000000000000000000084166108bc565b61065e565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156106945761068f836108bc565b6106cb565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016106dd939291906113d0565b6040516020818303038152906040529350505050919050565b6000610700610464565b90503073ffffffffffffffffffffffffffffffffffffffff8216036107315761072c868686868661096a565b6107be565b6040517f390baae000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063390baae09061078b9089908990899089908990600401611499565b600060405180830381600087803b1580156107a557600080fd5b505af11580156107b9573d6000803e3d6000fd5b505050505b505050505050565b6000806107d1610464565b90503073ffffffffffffffffffffffffffffffffffffffff821603610804576107fc86868686610986565b91505061089d565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d599061085c9089908990899089906004016114e0565b602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107fc919061150f565b949350505050565b60006108b360706010611557565b9190911b919050565b606060005b601081101561092b577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff00000000000000000000000000000000000000000000000000000000000000161561092b57806109238161156a565b9150506108c1565b604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166020820152815160309091019091528181528061089d565b61097f858561097984876109bc565b856109ff565b5050505050565b60006109b36109958686610cb7565b60ff858116601b0360080285901c166109ae85876109bc565b610d0d565b95945050505050565b600080805b8360ff168110156109f7576109e360ff601b83900360080287901c1683611557565b9150806109ef8161156a565b9150506109c1565b509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610a8957837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610a7c93929190611584565b60405180910390a261045e565b6000610a958585610cb7565b90506000610aa286610d5e565b905060005b8151811015610b81576000828281518110610ac457610ac46113a1565b60200260200101519050610af06004826affffffffffffffffffffff1916610e5990919063ffffffff16565b15610b6e576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610b3b908b908b908b908b906004016115c1565b600060405180830381600087803b158015610b5557600080fd5b505af1158015610b69573d6000803e3d6000fd5b505050505b5080610b798161156a565b915050610aa7565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610bb693929190611584565b60405180910390a2610bd1828565ffffffffffff1685610e77565b60005b8151811015610cae576000828281518110610bf157610bf16113a1565b60200260200101519050610c1d6008826affffffffffffffffffffff1916610e5990919063ffffffff16565b15610c9b576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610c68908b908b908b908b906004016115c1565b600060405180830381600087803b158015610c8257600080fd5b505af1158015610c96573d6000803e3d6000fd5b505050505b5080610ca68161156a565b915050610bd4565b50505050505050565b60008282604051602001610ccc929190611605565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600060208210610d3357602082048401935060208281610d2f57610d2f611640565b0691505b508254600882021b6020829003808411156109f7576001850154600882021c82179150509392505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610d9857610d986113a1565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090610e4290610e3a906112f2565b836000610e92565b905061089d610e548260008451610ecc565b610f5c565b60008160ff1682610e6a8560581c90565b1660ff1614905092915050565b610e8d83838351610e888560200190565b610f74565b505050565b606061089d610ea2858585611034565b6000610ec785610eb289896110b4565b9060ff166028026038011c64ffffffffff1690565b6110c7565b6000818311158015610edf575083518211155b610f1b578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016103979392919061166f565b60208401610f298482611557565b90506000610f378585611694565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000610f6d83601560006110ea565b9392505050565b8215610fee5760208310610f9e57602083048401935060208381610f9a57610f9a611640565b0692505b8215610fee5760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411610fdf57505061045e565b50600194909401939182900391015b5b602082106110105780518455600190930192601f1990910190602001610fef565b811561045e576000600019600884021c198554835182169119161785555050505050565b60008383604051602001611049929190611605565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b6000610f6d6110c38484611165565b5490565b60405160208101601f19603f84840101166040528282526109f7858585846111bb565b606060006110f88560801c90565b90506fffffffffffffffffffffffffffffffff8516600085828161111e5761111e611640565b04905060405193506020840160208202810160405281855260005b82811015611159578451871c825293870193602090910190600101611139565b50505050509392505050565b6000828260405160200161117a929190611605565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b821561124457602083106111e5576020830484019350602083816111e1576111e1611640565b0692505b82156112445760208390036000818410156112095750600019600884021c19611214565b50600019600882021c195b8554600886021b81198451168282161784525081841161123557505061045e565b50600194909401939182900391015b5b602082106112665783548152600190930192601f1990910190602001611245565b811561045e576000600019600884021c198251865482169119161782525050505050565b611035806116a883390190565b6000602082840312156112a957600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f6d57600080fd5b6000602082840312156112eb57600080fd5b5035919050565b80516020808301519190811015611313576000198160200360031b1b821691505b50919050565b60005b8381101561133457818101518382015260200161131c565b50506000910152565b60008151808452611355816020860160208601611319565b601f01601f19169290920160200192915050565b60408152600061137c604083018561133d565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a000000000000000000000000000000000000000000000000000000000000008060028401528451611431816003860160208901611319565b808401905081600382015284519150611451826004830160208801611319565b0160040195945050505050565b600081518084526020808501945080840160005b8381101561148e57815187529582019590820190600101611472565b509495945050505050565b85815260a0602082015260006114b260a083018761145e565b60ff8616604084015282810360608401526114cd818661133d565b9150508260808301529695505050505050565b8481526080602082015260006114f9608083018661145e565b60ff949094166040830152506060015292915050565b60006020828403121561152157600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082018082111561018257610182611528565b6000600019820361157d5761157d611528565b5060010190565b606081526000611597606083018661145e565b65ffffffffffff8516602084015282810360408401526115b7818561133d565b9695505050505050565b8481526080602082015260006115da608083018661145e565b65ffffffffffff8516604084015282810360608401526115fa818561133d565b979650505050505050565b82815260006020808301845182860160005b8281101561163357815184529284019290840190600101611617565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b606081526000611682606083018661133d565b60208301949094525060400152919050565b818103818111156101825761018261152856fe60c060405234801561001057600080fd5b5060405161103538038061103583398101604081905261002f9161007c565b6001600160a01b038216608081905260a08290527f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e17580546001600160a01b031916909117905550506100b6565b6000806040838503121561008f57600080fd5b82516001600160a01b03811681146100a657600080fd5b6020939093015192949293505050565b60805160a051610f326101036000396000818160e1015281816101b401528181610239015281816102b70152818161032e01526103a101526000818160b201526101630152610f326000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c8063c9a34acd11610050578063c9a34acd146101f9578063d72a26651461020c578063e2ed58bd1461021f57610072565b806330b67baa1461015e57806339f898bc146101af57806366c93bdb146101e4575b6040517f894ecc5800000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063894ecc589061010d9033907f00000000000000000000000000000000000000000000000000000000000000009086903690600401610a5c565b6000604051808303816000875af115801561012c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101549190810190610b88565b9050805160208201f35b6101857f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6101d67f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020016101a6565b6101f76101f2366004610c16565b610232565b005b6101f7610207366004610c7a565b6102b0565b6101f761021a366004610cd4565b610327565b6101f761022d366004610d1b565b61039a565b600061025d7f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff82161461029d576040516398d49b0360e01b81523360048201526024015b60405180910390fd5b82848688855160208701a4505050505050565b60006102db7f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff821614610316576040516398d49b0360e01b8152336004820152602401610294565b828486845160208601a35050505050565b60006103527f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff82161461038d576040516398d49b0360e01b8152336004820152602401610294565b82825160208401a1505050565b60006103c57f000000000000000000000000000000000000000000000000000000000000000061040f565b5090503373ffffffffffffffffffffffffffffffffffffffff821614610400576040516398d49b0360e01b8152336004820152602401610294565b8284835160208501a250505050565b6040805160018082528183019092526000918291829160208083019080368337019050509050838160008151811061044957610449610d6b565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f53797374656d73000000000000000000000000000000000000000000000000006030820152815180820390930183528101905260009081908190610515906104ef90610d81565b857e1502001401000000000000000000000000000000000000000000000000000061053a565b5050602081015160349091015160609190911c9860f89190911c975095505050505050565b606060006060600061054a610624565b90503073ffffffffffffffffffffffffffffffffffffffff82160361058057610574878787610670565b9350935093505061061b565b6040517f419b58fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063419b58fd906105d6908a908a908a90600401610da8565b600060405180830381865afa1580156105f3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105749190810190610dff565b93509350939050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff168061066b573391505090565b919050565b606060006060600061068185610778565b905061068e87878361079b565b9350600061069b866107df565b9050801561076d576106ad888861081c565b935066ffffffffffffff841667ffffffffffffffff8111156106d1576106d1610aaf565b6040519080825280601f01601f1916602001820160405280156106fb576020820181803683370190505b5092506020830160005b828160ff16101561076a57600061071d8b8b84610838565b9050600061073a888460ff166028026038011c64ffffffffff1690565b905061074982600083876108b8565b6107538185610e78565b93505050808061076290610e8b565b915050610705565b50505b505093509350939050565b6000600861078860026020610eaa565b6107929190610ebd565b9190911c919050565b6060816000036107ba57506040805160208101909152600081526107d8565b60006107c68585610985565b90506107d4816000856109db565b9150505b9392505050565b600060086001806107f260026020610eaa565b6107fc9190610eaa565b6108069190610eaa565b6108109190610ebd565b8260ff911c1692915050565b600061082f61082b8484610a06565b5490565b90505b92915050565b6000838360405160200161084d929190610ed4565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b821561094157602083106108e2576020830484019350602083816108de576108de610f0f565b0692505b82156109415760208390036000818410156109065750600019600884021c19610911565b50600019600882021c195b8554600886021b81198451168282161784525081841161093257505061097f565b50600194909401939182900391015b5b602082106109635783548152600190930192601f1990910190602001610942565b811561097f5780518454600019600885021c9182169119161781525b50505050565b6000828260405160200161099a929190610ed4565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b60405160208101601f19603f84840101166040528282526109fe858585846108b8565b509392505050565b60008282604051602001610a1b929190610ed4565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b73ffffffffffffffffffffffffffffffffffffffff8516815283602082015260606040820152816060820152818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610aee57610aee610aaf565b604052919050565b600067ffffffffffffffff821115610b1057610b10610aaf565b50601f01601f191660200190565b600082601f830112610b2f57600080fd5b8151610b42610b3d82610af6565b610ac5565b81815260208581848701011115610b5857600080fd5b60005b83811015610b76578581018201518382018301528101610b5b565b50600092820101919091529392505050565b600060208284031215610b9a57600080fd5b815167ffffffffffffffff811115610bb157600080fd5b610bbd84828501610b1e565b949350505050565b600082601f830112610bd657600080fd5b8135610be4610b3d82610af6565b818152846020838601011115610bf957600080fd5b816020850160208301376000918101602001919091529392505050565b600080600080600060a08688031215610c2e57600080fd5b85359450602086013593506040860135925060608601359150608086013567ffffffffffffffff811115610c6157600080fd5b610c6d88828901610bc5565b9150509295509295909350565b60008060008060808587031215610c9057600080fd5b843593506020850135925060408501359150606085013567ffffffffffffffff811115610cbc57600080fd5b610cc887828801610bc5565b91505092959194509250565b60008060408385031215610ce757600080fd5b82359150602083013567ffffffffffffffff811115610d0557600080fd5b610d1185828601610bc5565b9150509250929050565b600080600060608486031215610d3057600080fd5b8335925060208401359150604084013567ffffffffffffffff811115610d5557600080fd5b610d6186828701610bc5565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b80516020808301519190811015610da2576000198160200360031b1b821691505b50919050565b6000606082018583526020606081850152818651808452608086019150828801935060005b81811015610de957845183529383019391830191600101610dcd565b5050809350505050826040830152949350505050565b600080600060608486031215610e1457600080fd5b835167ffffffffffffffff80821115610e2c57600080fd5b610e3887838801610b1e565b9450602086015193506040860151915080821115610e5557600080fd5b50610d6186828701610b1e565b634e487b7160e01b600052601160045260246000fd5b8082018082111561083257610832610e62565b600060ff821660ff8103610ea157610ea1610e62565b60010192915050565b8181038181111561083257610832610e62565b808202811582820484141761083257610832610e62565b82815260006020808301845182860160005b82811015610f0257815184529284019290840190600101610ee6565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000aa164736f6c6343000815000a608060405234801561001057600080fd5b50610a77806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806345ec93541161005057806345ec9354146100ec578063d737d0c7146100ff578063e1af802c1461010757600080fd5b806301ffc9a714610077578063119df25f1461009f578063319585fb146100cc575b600080fd5b61008a6100853660046107a3565b61010f565b60405190151581526020015b60405180910390f35b6100a76101a8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100df6100da366004610802565b6101b7565b60405161009691906108f9565b604051601f193601358152602001610096565b6100a7610272565b6100a761027c565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101b2610286565b905090565b60606101c16102b8565b73ffffffffffffffffffffffffffffffffffffffff1663d72a26657fe762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d8460405160200161020e91906108f9565b6040516020818303038152906040526040518363ffffffff1660e01b815260040161023a92919061090c565b600060405180830381600087803b15801561025457600080fd5b505af1158015610268573d6000803e3d6000fd5b5093949350505050565b60006101b26101a8565b60006101b26103bf565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102b55750335b90565b6000806102c43061040b565b604080517f746200000000000000000000000000000000000000000000000000000000000060208201527f707570706574000000000000000000000000000000000000000000000000000060228201527f50757070657452656769737472790000000000000000000000000000000000006030820152919250600091610363910160405160208183030381529060405261035d90610925565b8361052f565b905073ffffffffffffffffffffffffffffffffffffffff81166101a2576040517f9434f7e10000000000000000000000000000000000000000000000000000000081523060048201526024810183905260440160405180910390fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610406573391505090565b919050565b604080516001808252818301909252600091829190602080830190803683370190505090508273ffffffffffffffffffffffffffffffffffffffff1660001b8160008151811061045d5761045d61094c565b602090810291909101810191909152604080517f7462000000000000000000000000000000000000000000000000000000000000818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f53797374656d526567697374727900000000000000000000000000000000000060308201528151808203909301835281019052600090610527906104ff90610925565b8360007e200100200000000000000000000000000000000000000000000000000000006105ac565b949350505050565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106105685761056861094c565b602090810291909101015260006105a08583837e140100140000000000000000000000000000000000000000000000000000006105ac565b60601c95945050505050565b6000806105b76103bf565b90503073ffffffffffffffffffffffffffffffffffffffff8216036105ea576105e286868686610683565b915050610527565b6040517f8c364d5900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690638c364d5990610642908990899089908990600401610962565b602060405180830381865afa15801561065f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105e291906109bd565b60006106b061069286866106b9565b60ff858116601b0360080285901c166106ab858761070f565b610752565b95945050505050565b600082826040516020016106ce9291906109d6565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff1681101561074a5761073660ff601b83900360080287901c1683610a27565b91508061074281610a3a565b915050610714565b509392505050565b6000602082106107785760208204840193506020828161077457610774610a54565b0691505b508254600882021b60208290038084111561074a576001850154600882021c82179150509392505050565b6000602082840312156107b557600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146107e557600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561081457600080fd5b813567ffffffffffffffff8082111561082c57600080fd5b818401915084601f83011261084057600080fd5b813581811115610852576108526107ec565b604051601f8201601f19908116603f0116810190838211818310171561087a5761087a6107ec565b8160405282815287602084870101111561089357600080fd5b826020860160208301376000928101602001929092525095945050505050565b6000815180845260005b818110156108d9576020818501810151868301820152016108bd565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006107e560208301846108b3565b82815260406020820152600061052760408301846108b3565b80516020808301519190811015610946576000198160200360031b1b821691505b50919050565b634e487b7160e01b600052603260045260246000fd5b600060808201868352602060808185015281875180845260a086019150828901935060005b818110156109a357845183529383019391830191600101610987565b505060ff9690961660408501525050506060015292915050565b6000602082840312156109cf57600080fd5b5051919050565b82815260006020808301845182860160005b82811015610a04578151845292840192908401906001016109e8565b5091979650505050505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156101a2576101a2610a11565b60006000198203610a4d57610a4d610a11565b5060010190565b634e487b7160e01b600052601260045260246000fdfea164736f6c6343000815000a608060405234801561001057600080fd5b50611a59806100206000396000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806345ec93541161005b57806345ec9354146100ec5780638d53b208146100ff578063e1af802c14610112578063ef5d6bbb1461011a57600080fd5b806301ffc9a714610082578063119df25f146100aa57806340554c3a146100d7575b600080fd5b61009561009036600461165b565b61012d565b60405190151581526020015b60405180910390f35b6100b26101c6565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100ea6100e536600461169d565b6101d5565b005b604051601f1936013581526020016100a1565b6100ea61010d36600461169d565b6101f6565b6100b261020c565b6100ea61012836600461169d565b610216565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101c057507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101d061023d565b905090565b6101e6826101e16101c6565b61026f565b6101f282826001610333565b5050565b610202826101e16101c6565b6101f28282610463565b60006101d0610568565b610222826101e16101c6565b61022c82826105b4565b6101e6826102386101c6565b610463565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c8061026c5750335b90565b73ffffffffffffffffffffffffffffffffffffffff81166102d17f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff000000000000000000000000000000008516176106c2565b73ffffffffffffffffffffffffffffffffffffffff16146101f2576102f58261079d565b816040517fd787b73700000000000000000000000000000000000000000000000000000000815260040161032a929190611736565b60405180910390fd5b604080516002808252606082018352600092602083019080368337019050509050838160008151811061036857610368611784565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106103a1576103a1611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f757263654163636573730000000000000000000000000000000000006030820152815180820390930183528101905261045d9061040d9061179a565b8260008560405160200161042891151560f81b815260010190565b60408051601f198184030181529190527e010100010000000000000000000000000000000000000000000000000000006108da565b50505050565b604080516002808252606082018352600092602083019080368337019050509050828160008151811061049857610498611784565b6020026020010181815250508173ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106104d1576104d1611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f75726365416363657373000000000000000000000000000000000000603082015281518082039093018352810190526105639061053d9061179a565b827e010100010000000000000000000000000000000000000000000000000000006108f6565b505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff16806105af573391505090565b919050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106105ea576105ea611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e657200000000000000000000000000000000000060308201528151808203909301835281019052610563906106569061179a565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006108da565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106106fb576106fb611784565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906107929061076a9061179a565b8360007e14010014000000000000000000000000000000000000000000000000000000610c11565b60601c949350505050565b606081601081901b60006107b083610c47565b9050827fffffffffffffffffffffffffffff00000000000000000000000000000000000083161561080b576108067fffffffffffffffffffffffffffff0000000000000000000000000000000000008416610c5e565b610842565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156108785761087383610c5e565b6108af565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6040516020016108c1939291906117c1565b6040516020818303038152906040529350505050919050565b6108ef85856108e98487610d10565b85610d53565b5050505050565b7f6f74000000000000000000000000000000000000000000000000000000000000837fffff000000000000000000000000000000000000000000000000000000000000160361097c57827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d078360405161096f919061188a565b60405180910390a2505050565b60006109878461100b565b905060005b8151811015610a645760008282815181106109a9576109a9611784565b602002602001015190506109d56040826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610a51576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf4590610a1e9089908990899060040161189d565b600060405180830381600087803b158015610a3857600080fd5b505af1158015610a4c573d6000803e3d6000fd5b505050505b5080610a5c816118dc565b91505061098c565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0784604051610a95919061188a565b60405180910390a26000610aa98585611109565b9050610b02816000610aba8661115f565b67ffffffffffffffff811115610ad257610ad261176e565b6040519080825280601f01601f191660200182016040528015610afc576020820181803683370190505b50611182565b6000610b0d84611198565b1115610b2e576000610b1f86866111d5565b9050610b2c81602061122b565b505b60005b8251811015610c09576000838281518110610b4e57610b4e611784565b60200260200101519050610b7a6080826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610bf6576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b90610bc3908a908a908a9060040161189d565b600060405180830381600087803b158015610bdd57600080fd5b505af1158015610bf1573d6000803e3d6000fd5b505050505b5080610c01816118dc565b915050610b31565b505050505050565b6000610c3e610c208686611109565b60ff858116601b0360080285901c16610c398587610d10565b611268565b95945050505050565b6000610c55607060106118f6565b9190911b919050565b606060005b6010811015610ccd577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff000000000000000000000000000000000000000000000000000000000000001615610ccd5780610cc5816118dc565b915050610c63565b604080517fffffffffffffffffffffffffffffffff000000000000000000000000000000008516602082015281516030909101909152818152805b949350505050565b600080805b8360ff16811015610d4b57610d3760ff601b83900360080287901c16836118f6565b915080610d43816118dc565b915050610d15565b509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610ddd57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610dd093929190611909565b60405180910390a261045d565b6000610de98585611109565b90506000610df68661100b565b905060005b8151811015610ed5576000828281518110610e1857610e18611784565b60200260200101519050610e446004826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610ec2576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610e8f908b908b908b908b90600401611946565b600060405180830381600087803b158015610ea957600080fd5b505af1158015610ebd573d6000803e3d6000fd5b505050505b5080610ecd816118dc565b915050610dfb565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610f0a93929190611909565b60405180910390a2610f25828565ffffffffffff1685611182565b60005b8151811015611002576000828281518110610f4557610f45611784565b60200260200101519050610f716008826affffffffffffffffffffff19166110eb90919063ffffffff16565b15610fef576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610fbc908b908b908b908b90600401611946565b600060405180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050505b5080610ffa816118dc565b915050610f28565b50505050505050565b6040805160018082528183019092526060916000919060208083019080368337019050509050828160008151811061104557611045611784565b60209081029190910181019190915260408051613a3160f11b818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015281518082039093018352810190526000906110d4906110cc9061179a565b8360006112b9565b9050610d086110e682600084516112f3565b611383565b60008160ff16826110fc8560581c90565b1660ff1614905092915050565b6000828260405160200161111e92919061198a565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b6000600861116f600260206119c5565b61117991906119d8565b9190911c919050565b610563838383516111938560200190565b61139b565b600060086001806111ab600260206119c5565b6111b591906119c5565b6111bf91906119c5565b6111c991906119d8565b8260ff911c1692915050565b600082826040516020016111ea92919061198a565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000602061123a83601f6118f6565b6112449190611a05565b61124e90846118f6565b90505b808310156105635760008355600183019250611251565b60006020821061128e5760208204840193506020828161128a5761128a6119ef565b0691505b508254600882021b602082900380841115610d4b576001850154600882021c82179150509392505050565b6060610d086112c985858561145b565b60006112ee856112d989896114db565b9060ff166028026038011c64ffffffffff1690565b6114ee565b6000818311158015611306575083518211155b611342578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161032a93929190611a27565b6020840161135084826118f6565b9050600061135e85856119c5565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006113948360156000611511565b9392505050565b821561141557602083106113c5576020830484019350602083816113c1576113c16119ef565b0692505b82156114155760208390036000600019600885021c1990506008850281811c91508351811c905081198754168282161787555081841161140657505061045d565b50600194909401939182900391015b5b602082106114375780518455600190930192601f1990910190602001611416565b811561045d576000600019600884021c198554835182169119161785555050505050565b6000838360405160200161147092919061198a565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006113946114ea84846111d5565b5490565b60405160208101601f19603f8484010116604052828252610d4b8585858461158c565b6060600061151f8560801c90565b90506fffffffffffffffffffffffffffffffff85166000858281611545576115456119ef565b04905060405193506020840160208202810160405281855260005b82811015611580578451871c825293870193602090910190600101611560565b50505050509392505050565b821561161557602083106115b6576020830484019350602083816115b2576115b26119ef565b0692505b82156116155760208390036000818410156115da5750600019600884021c196115e5565b50600019600882021c195b8554600886021b81198451168282161784525081841161160657505061045d565b50600194909401939182900391015b5b602082106116375783548152600190930192601f1990910190602001611616565b811561045d576000600019600884021c198251865482169119161782525050505050565b60006020828403121561166d57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461139457600080fd5b600080604083850312156116b057600080fd5b82359150602083013573ffffffffffffffffffffffffffffffffffffffff811681146116db57600080fd5b809150509250929050565b60005b838110156117015781810151838201526020016116e9565b50506000910152565b600081518084526117228160208601602086016116e6565b601f01601f19169290920160200192915050565b604081526000611749604083018561170a565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b805160208083015191908110156117bb576000198160200360031b1b821691505b50919050565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516118228160038601602089016116e6565b8084019050816003820152845191506118428260048301602088016116e6565b0160040195945050505050565b600081518084526020808501945080840160005b8381101561187f57815187529582019590820190600101611863565b509495945050505050565b602081526000611394602083018461184f565b8381526060602082015260006118b6606083018561184f565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b600060001982036118ef576118ef6118c6565b5060010190565b808201808211156101c0576101c06118c6565b60608152600061191c606083018661184f565b65ffffffffffff85166020840152828103604084015261193c818561170a565b9695505050505050565b84815260806020820152600061195f608083018661184f565b65ffffffffffff85166040840152828103606084015261197f818561170a565b979650505050505050565b82815260006020808301845182860160005b828110156119b85781518452928401929084019060010161199c565b5091979650505050505050565b818103818111156101c0576101c06118c6565b80820281158282048414176101c0576101c06118c6565b634e487b7160e01b600052601260045260246000fd5b600082611a2257634e487b7160e01b600052601260045260246000fd5b500490565b606081526000611a3a606083018661170a565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b506118ac806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c806345ec93541161005057806345ec9354146100e1578063c9c85a60146100f4578063e1af802c1461010757600080fd5b806301ffc9a714610077578063119df25f1461009f57806345afd199146100cc575b600080fd5b61008a610085366004611460565b61010f565b60405190151581526020015b60405180910390f35b6100a76101a8565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b6100df6100da3660046114a2565b6101b7565b005b604051601f193601358152602001610096565b6100df6101023660046114f3565b6102ac565b6100a76103e7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101a257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101b26103f1565b905090565b6101c8836101c36101a8565b610423565b60006101d384610473565b90508082111561021e576040517f0e0e2d4d00000000000000000000000000000000000000000000000000000000815260048101829052602481018390526044015b60405180910390fd5b6102318461022c848461154e565b610563565b6000808473ffffffffffffffffffffffffffffffffffffffff168460405160006040518083038185875af1925050503d806000811461028c576040519150601f19603f3d011682016040523d82523d6000602084013e610291565b606091505b5091509150816102a4576102a48161066d565b505050505050565b7f6e73000000000000000000000000000000000000000000000000000000000000827fffff0000000000000000000000000000000000000000000000000000000000001614610355577f6e730000000000000000000000000000000000000000000000000000000000008261032084610675565b6040517f5c30fb6f000000000000000000000000000000000000000000000000000000008152600401610215939291906115b1565b61035e826107b2565b61036a836101c36101a8565b600061037584610473565b9050808211156103bb576040517f0e0e2d4d0000000000000000000000000000000000000000000000000000000081526004810182905260248101839052604401610215565b6103c98461022c848461154e565b6103e183836103d786610473565b61022c91906115f2565b50505050565b60006101b2610800565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806104205750335b90565b61042d828261084c565b61046f5761043a82610675565b816040517fd787b737000000000000000000000000000000000000000000000000000000008152600401610215929190611605565b5050565b6040805160018082528183019092526000918291906020808301908036833701905050905082816000815181106104ac576104ac61163d565b60209081029190910181019190915260408051613a3160f11b818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f42616c616e6365730000000000000000000000000000000000000000000000006030820152815180820390930183528101905260009061055b906105339061166c565b8360007e200100200000000000000000000000000000000000000000000000000000006108b1565b949350505050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106105995761059961163d565b60209081029190910181019190915260408051613a3160f11b818401527f776f726c6400000000000000000000000000000000000000000000000000000060228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015281518082039093018352810190526106689061061d9061166c565b8260008560405160200161063391815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006108e7565b505050565b805160208201fd5b606081601081901b600061068883610903565b9050827fffffffffffffffffffffffffffff0000000000000000000000000000000000008316156106e3576106de7fffffffffffffffffffffffffffff000000000000000000000000000000000000841661091a565b61071a565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008316156107505761074b8361091a565b610787565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b60405160200161079993929190611693565b6040516020818303038152906040529350505050919050565b6107bb816109c8565b6107fd57806107c982610675565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610215929190611721565b50565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610847573391505090565b919050565b600061089a7f6e730000000000000000000000000000000000000000000000000000000000007dffffffffffffffffffffffffffff0000000000000000000000000000000085161783610ac2565b806108aa57506108aa8383610ac2565b9392505050565b60006108de6108c08686610bb9565b60ff858116601b0360080285901c166108d98587610c0f565b610c52565b95945050505050565b6108fc85856108f68487610c0f565b85610ca3565b5050505050565b6000610911607060106115f2565b9190911b919050565b606060005b6010811015610989577fffffffffffffffffffffffffffffffff000000000000000000000000000000008316600882021b7fff00000000000000000000000000000000000000000000000000000000000000161561098957806109818161173a565b91505061091f565b604080517fffffffffffffffffffffffffffffffff0000000000000000000000000000000085166020820152815160309091019091528181528061055b565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110610a0157610a0161163d565b60209081029190910181019190915260408051613a3160f11b928101929092527f73746f726500000000000000000000000000000000000000000000000000000060228301527f5265736f757263654964730000000000000000000000000000000000000000006030830152600091610ab691015b604051602081830303815290604052610a8e9061166c565b8360007e010100010000000000000000000000000000000000000000000000000000006108b1565b905061055b8160f81c90565b604080516002808252606082018352600092839291906020830190803683370190505090508381600081518110610afb57610afb61163d565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b81600181518110610b3457610b3461163d565b60209081029190910181019190915260408051613a3160f11b928101929092527f776f726c6400000000000000000000000000000000000000000000000000000060228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152600091610bad9101610a76565b90506108de8160f81c90565b60008282604051602001610bce929190611754565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b600080805b8360ff16811015610c4a57610c3660ff601b83900360080287901c16836115f2565b915080610c428161173a565b915050610c14565b509392505050565b600060208210610c7857602082048401935060208281610c7457610c7461178f565b0691505b508254600882021b602082900380841115610c4a576001850154600882021c82179150509392505050565b7f6f74000000000000000000000000000000000000000000000000000000000000847fffff0000000000000000000000000000000000000000000000000000000000001603610d2d57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be848484604051610d20939291906117f9565b60405180910390a26103e1565b6000610d398585610bb9565b90506000610d4686610f5b565b905060005b8151811015610e25576000828281518110610d6857610d6861163d565b60200260200101519050610d946004826affffffffffffffffffffff191661103b90919063ffffffff16565b15610e12576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90610ddf908b908b908b908b90600401611836565b600060405180830381600087803b158015610df957600080fd5b505af1158015610e0d573d6000803e3d6000fd5b505050505b5080610e1d8161173a565b915050610d4b565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be868686604051610e5a939291906117f9565b60405180910390a2610e75828565ffffffffffff1685611059565b60005b8151811015610f52576000828281518110610e9557610e9561163d565b60200260200101519050610ec16008826affffffffffffffffffffff191661103b90919063ffffffff16565b15610f3f576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190610f0c908b908b908b908b90600401611836565b600060405180830381600087803b158015610f2657600080fd5b505af1158015610f3a573d6000803e3d6000fd5b505050505b5080610f4a8161173a565b915050610e78565b50505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110610f9557610f9561163d565b60209081029190910181019190915260408051613a3160f11b818401527f73746f726500000000000000000000000000000000000000000000000000000060228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015281518082039093018352810190526000906110249061101c9061166c565b83600061106f565b905061055b61103682600084516110a9565b611139565b60008160ff168261104c8560581c90565b1660ff1614905092915050565b6106688383835161106a8560200190565b61114a565b606061055b61107f85858561120a565b60006110a48561108f898961128a565b9060ff166028026038011c64ffffffffff1690565b61129d565b60008183111580156110bc575083518211155b6110f8578383836040517f23230fa30000000000000000000000000000000000000000000000000000000081526004016102159392919061187a565b6020840161110684826115f2565b90506000611114858561154e565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006108aa83601560006112c0565b82156111c45760208310611174576020830484019350602083816111705761117061178f565b0692505b82156111c45760208390036000600019600885021c1990506008850281811c91508351811c90508119875416828216178755508184116111b55750506103e1565b50600194909401939182900391015b5b602082106111e65780518455600190930192601f19909101906020016111c5565b81156103e1576000600019600884021c198554835182169119161785555050505050565b6000838360405160200161121f929190611754565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006108aa611299848461133b565b5490565b60405160208101601f19603f8484010116604052828252610c4a85858584611391565b606060006112ce8560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816112f4576112f461178f565b04905060405193506020840160208202810160405281855260005b8281101561132f578451871c82529387019360209091019060010161130f565b50505050509392505050565b60008282604051602001611350929190611754565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b821561141a57602083106113bb576020830484019350602083816113b7576113b761178f565b0692505b821561141a5760208390036000818410156113df5750600019600884021c196113ea565b50600019600882021c195b8554600886021b81198451168282161784525081841161140b5750506103e1565b50600194909401939182900391015b5b6020821061143c5783548152600190930192601f199091019060200161141b565b81156103e1576000600019600884021c198251865482169119161782525050505050565b60006020828403121561147257600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146108aa57600080fd5b6000806000606084860312156114b757600080fd5b83359250602084013573ffffffffffffffffffffffffffffffffffffffff811681146114e257600080fd5b929592945050506040919091013590565b60008060006060848603121561150857600080fd5b505081359360208301359350604090920135919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156101a2576101a261151f565b60005b8381101561157c578181015183820152602001611564565b50506000910152565b6000815180845261159d816020860160208601611561565b601f01601f19169290920160200192915050565b7fffff000000000000000000000000000000000000000000000000000000000000841681528260208201526060604082015260006108de6060830184611585565b808201808211156101a2576101a261151f565b6040815260006116186040830185611585565b905073ffffffffffffffffffffffffffffffffffffffff831660208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b8051602080830151919081101561168d576000198160200360031b1b821691505b50919050565b7fffff0000000000000000000000000000000000000000000000000000000000008416815260007f3a0000000000000000000000000000000000000000000000000000000000000080600284015284516116f4816003860160208901611561565b808401905081600382015284519150611714826004830160208801611561565b0160040195945050505050565b82815260406020820152600061055b6040830184611585565b6000600019820361174d5761174d61151f565b5060010190565b82815260006020808301845182860160005b8281101561178257815184529284019290840190600101611766565b5091979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600081518084526020808501945080840160005b838110156117ee578151875295820195908201906001016117d2565b509495945050505050565b60608152600061180c60608301866117be565b65ffffffffffff85166020840152828103604084015261182c8185611585565b9695505050505050565b84815260806020820152600061184f60808301866117be565b65ffffffffffff85166040840152828103606084015261186f8185611585565b979650505050505050565b60608152600061188d6060830186611585565b6020830194909452506040015291905056fea164736f6c6343000815000a608060405234801561001057600080fd5b50610af5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100725760003560e01c80638fc8cf7e116100505780638fc8cf7e146100df578063ce5e8dd9146100ff578063e1af802c1461011257600080fd5b806301ffc9a714610077578063119df25f1461009f57806345ec9354146100cc575b600080fd5b61008a61008536600461063e565b61011a565b60405190151581526020015b60405180910390f35b6100a76101b3565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610096565b604051601f193601358152602001610096565b6100f26100ed3660046106d3565b6101c2565b6040516100969190610739565b6100f261010d3660046106d3565b6103d7565b6100a76105ae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee1270000000000000000000000000000000000000000000000000000000014806101ad57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b60006101bd6105b8565b905090565b606060006101ce6105ae565b90508267ffffffffffffffff8111156101e9576101e96107d1565b60405190808252806020026020018201604052801561021c57816020015b60608152602001906001900390816102075790505b50915060005b838110156103cf5760008073ffffffffffffffffffffffffffffffffffffffff84168063894ecc5889898781811061025c5761025c610800565b905060200281019061026e919061082f565b61027c90602081019061086d565b8a8a8881811061028e5761028e610800565b90506020028101906102a0919061082f565b602001358b8b898181106102b6576102b6610800565b90506020028101906102c8919061082f565b6102d69060408101906108a3565b6040516024016102e99493929190610933565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516103369250610973565b600060405180830381855af49150503d8060008114610371576040519150601f19603f3d011682016040523d82523d6000602084013e610376565b606091505b50915091508161038957610389816105ea565b8080602001905181019061039d9190610985565b8584815181106103af576103af610800565b6020026020010181905250505080806103c790610a32565b915050610222565b505092915050565b606060006103e36105ae565b90508267ffffffffffffffff8111156103fe576103fe6107d1565b60405190808252806020026020018201604052801561043157816020015b606081526020019060019003908161041c5790505b50915060005b838110156103cf5760008073ffffffffffffffffffffffffffffffffffffffff841680633ae7af0889898781811061047157610471610800565b90506020028101906104839190610a91565b358a8a8881811061049657610496610800565b90506020028101906104a89190610a91565b6104b69060208101906108a3565b6040516024016104c893929190610ac5565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09490941b9390931790925290516105159250610973565b600060405180830381855af49150503d8060008114610550576040519150601f19603f3d011682016040523d82523d6000602084013e610555565b606091505b50915091508161056857610568816105ea565b8080602001905181019061057c9190610985565b85848151811061058e5761058e610800565b6020026020010181905250505080806105a690610a32565b915050610437565b60006101bd6105f2565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806105e75750335b90565b805160208201fd5b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610639573391505090565b919050565b60006020828403121561065057600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461068057600080fd5b9392505050565b60008083601f84011261069957600080fd5b50813567ffffffffffffffff8111156106b157600080fd5b6020830191508360208260051b85010111156106cc57600080fd5b9250929050565b600080602083850312156106e657600080fd5b823567ffffffffffffffff8111156106fd57600080fd5b61070985828601610687565b90969095509350505050565b60005b83811015610730578181015183820152602001610718565b50506000910152565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156107c4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452815180518087526107a5818989018a8501610715565b601f01601f191695909501860194509285019290850190600101610760565b5092979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261086357600080fd5b9190910192915050565b60006020828403121561087f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461068057600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126108d857600080fd5b83018035915067ffffffffffffffff8211156108f357600080fd5b6020019150368190038213156106cc57600080fd5b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152606060408201526000610969606083018486610908565b9695505050505050565b60008251610863818460208701610715565b60006020828403121561099757600080fd5b815167ffffffffffffffff808211156109af57600080fd5b818401915084601f8301126109c357600080fd5b8151818111156109d5576109d56107d1565b604051601f8201601f19908116603f011681019083821181831017156109fd576109fd6107d1565b81604052828152876020848701011115610a1657600080fd5b610a27836020830160208801610715565b979650505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610a8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b5060010190565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261086357600080fd5b838152604060208201526000610adf604083018486610908565b9594505050505056fea164736f6c6343000815000a608060405234801561001057600080fd5b5061565b80620000216000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063530f4b6011610097578063b29e408911610066578063b29e408914610226578063bfdfaff714610239578063d5f8337f1461024c578063e1af802c1461025f57600080fd5b8063530f4b60146101da578063742d6118146101ed5780638da798da14610200578063a92813ad1461021357600080fd5b80631d2257ba116100d35780631d2257ba1461017557806326d98102146101885780633350b6a9146101b457806345ec9354146101c757600080fd5b806301ffc9a714610105578063056091291461012d5780630ba51f4914610142578063119df25f14610155575b600080fd5b610118610113366004614aa7565b610267565b60405190151581526020015b60405180910390f35b61014061013b366004614ad7565b6102d0565b005b610140610150366004614b53565b6102ef565b61015d6103bf565b6040516001600160a01b039091168152602001610124565b610140610183366004614ca0565b6103ce565b61019b610196366004614cf9565b61044e565b6040516001600160e01b03199091168152602001610124565b6101406101c2366004614d40565b610546565b604051601f193601358152602001610124565b6101406101e8366004614d98565b610731565b61019b6101fb366004614dd6565b610772565b61014061020e366004614e24565b61082d565b610140610221366004614ad7565b610946565b610140610234366004614e5e565b6109ba565b610140610247366004614e77565b610a5e565b61014061025a366004614d98565b610b28565b61015d610b8f565b60006001600160e01b031982167fb5dee1270000000000000000000000000000000000000000000000000000000014806102ca57506001600160e01b031982167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6102e1826102dc6103bf565b610b99565b6102eb8282610c1f565b5050565b60006102fa89610c6c565b6fffffffffffffffffffffffffffffffff191603610359578761031c89610c83565b6040517fe4ac069e000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b60405180910390fd5b610389616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008a1617610d97565b610395886102dc6103bf565b6103b5888888886103a6888a614f1a565b6103b08789614f1a565b610de2565b5050505050505050565b60006103c9611082565b905090565b6103e06103d96103bf565b84846110b4565b6103e9826111de565b80156103f6575060008151115b15610449576000610406836111fa565b9050610432817faf585477000000000000000000000000000000000000000000000000000000006112d5565b61044661043d6103bf565b84846000611330565b50505b505050565b600061045c836102dc6103bf565b600061048561046b8560101b90565b71ffffffffffffffffffffffffffffffffffff191661135d565b9050600061049a61049586610c6c565b61135d565b905060008282866040516020016104b393929190614f9e565b60405160208183030381529060405290508080519060200120935060006104d9856113f1565b9050801561051f576040517f3d1d1ae20000000000000000000000000000000000000000000000000000000081526001600160e01b031986166004820152602401610350565b855160208701206105318689836114e0565b61053b86846115e8565b505050505092915050565b7f7379000000000000000000000000000000000000000000000000000000000000836001600160f01b031916146105d7577f7379000000000000000000000000000000000000000000000000000000000000836105a285610c83565b6040517f5c30fb6f00000000000000000000000000000000000000000000000000000000815260040161035093929190615014565b7dffffffffffffffffffffffffffff000000000000000000000000000000008316616e7360f01b1761060881610d97565b610614816102dc6103bf565b61063e837fb5dee127000000000000000000000000000000000000000000000000000000006112d5565b600061064985610c6c565b6fffffffffffffffffffffffffffffffff19160361066b578361031c85610c83565b6000610676846116ee565b905080158015906106875750848114155b156106c9576040517fc0b707410000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610350565b60006106d4866111fa565b90506001600160a01b038116156106fd576106ee816117d0565b6106f883826118a4565b610708565b610708866001611997565b610713868686611a8f565b61071d8587611b6f565b61072983866001611c0f565b505050505050565b61075b827f1873396a000000000000000000000000000000000000000000000000000000006112d5565b610767836102dc6103bf565b610449838383611cce565b60408051616e7360f01b602082015260006022820181905260308201819052916107b791016040516020818303038152906040526107af9061503d565b6102dc6103bf565b508151602083012060006107ca826113f1565b90508015610810576040517f3d1d1ae20000000000000000000000000000000000000000000000000000000081526001600160e01b031983166004820152602401610350565b61081b8286856114e0565b61082582856115e8565b509392505050565b610857827f780ac2fc000000000000000000000000000000000000000000000000000000006112d5565b6108d36108626103bf565b600084846040516024016108769190615061565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f13861fb500000000000000000000000000000000000000000000000000000000179052611d2f565b506102eb826001600160a01b03166317d7de7c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109399190615074565b8251602084012084611d40565b610952826102dc6103bf565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d486f6f6b7300000000000000000000000000000000000000000060308201526102eb91015b6040516020818303038152906040526109b39061503d565b8383611e73565b616e7360f01b816001600160f01b031916146109e057616e7360f01b816105a283610c83565b6109e981611f9a565b15610a2c57806109f882610c83565b6040517f0dc28f6a000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b610a37816001611997565b610a4881610a436103bf565b61207c565b610a5b81610a546103bf565b6001611c0f565b50565b616e7360f01b836001600160f01b03191614610a8457616e7360f01b836105a285610c83565b610a8d826111de565b610ac3576040517f71ee9e8100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610acf836102dc6103bf565b6000610ada836111fa565b9050610b06817faf585477000000000000000000000000000000000000000000000000000000006112d5565b610b108484612110565b815115610b225761044661043d6103bf565b50505050565b610b52827f540fbfa8000000000000000000000000000000000000000000000000000000006112d5565b610b5e836102dc6103bf565b610449836bffffffffffffffffffffffff19606085901b166bff0000000000000000000000605885901b16176121a4565b60006103c9612293565b6001600160a01b038116610bd3616e7360f01b7dffffffffffffffffffffffffffff000000000000000000000000000000008516176122d2565b6001600160a01b0316146102eb57610bea82610c83565b816040517fd787b7370000000000000000000000000000000000000000000000000000000081526004016103509291906150a7565b60408051613a3160f11b60208201526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201526102eb910161099b565b6000610c7a607060106150e8565b9190911b919050565b606081601081901b6000610c9683610c6c565b90508271ffffffffffffffffffffffffffffffffffff19831615610cd757610cd271ffffffffffffffffffffffffffffffffffff19841661135d565b610d0e565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b6fffffffffffffffffffffffffffffffff19831615610d3557610d308361135d565b610d6c565b6040518060400160405280600681526020017f3c726f6f743e00000000000000000000000000000000000000000000000000008152505b604051602001610d7e939291906150fb565b6040516020818303038152906040529350505050919050565b610da081611f9a565b610a5b5780610dae82610c83565b6040517ffbf10ce6000000000000000000000000000000000000000000000000000000008152600401610350929190614f01565b613a3160f11b866001600160f01b03191614801590610e105750611bdd60f21b866001600160f01b03191614155b15610e7157613a3160f11b8687604051602001610e2f91815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252610350939291600401615014565b610e7a856123a2565b610e85846001612523565b610e90836000612523565b60e084901c60e885901c0160ff16825114610ef05760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b60e085901c60e886901c0160ff16815114610f505760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff1614610fc85760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610350565b610fd186611f9a565b1561102b578586604051602001610fea91815260200190565b60408051601f19818403018152908290527fdfaaf9cf0000000000000000000000000000000000000000000000000000000082526103509291600401614f01565b61107786868686866040516020016110439190615171565b604051602081830303815290604052866040516020016110639190615171565b6040516020818303038152906040526126cf565b610729866001611997565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806110b15750335b90565b604080516002808252606082018352600092602083019080368337019050509050836001600160a01b031660001b816000815181106110f5576110f56151f1565b602002602001018181525050826001600160a01b031660001b81600181518110611121576111216151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5573657244656c65676174696f6e436f000000000000000000000000000000006030830152610b2291015b6040516020818303038152906040526111939061503d565b826000856040516020016111a991815260200190565b60408051601f198184030181529190527e200100200000000000000000000000000000000000000000000000000000006127d3565b600081151580156102ca57506111f3826127e8565b1592915050565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611233576112336151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000906112ca906112a29061503d565b8360007e15020014010000000000000000000000000000000000000000000000000000612863565b60601c949350505050565b6112df8282612899565b6102eb576040517f74b5e6ff0000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526001600160e01b031982166024820152604401610350565b6060600080611341878787876128bc565b91509150816113535761135381612aa0565b9695505050505050565b606060005b60108110156113bd576fffffffffffffffffffffffffffffffff198316600882021b7fff0000000000000000000000000000000000000000000000000000000000000016156113bd57806113b581615207565b915050611362565b604080516fffffffffffffffffffffffffffffffff198516602082015281516030909101909152818152805b949350505050565b60408051600180825281830190925260009182919060208083019080368337019050509050827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681600081518110611449576114496151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015281518082039093018352810190526000906113e9906114b89061503d565b8360007e24020020040000000000000000000000000000000000000000000000000000612863565b60006114ec8383612aa8565b60408051600180825281830190925291925060009160609183919060208083019080368337019050509050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061154a5761154a6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015281518082039093018352810190526115df906115b69061503d565b828686867e24020020040000000000000000000000000000000000000000000000000000612ae7565b50505050505050565b606060006115f583612e01565b9050600061160284612e11565b6040805160018082528183019092529192506000919060208083019080368337019050509050857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168160008151811061165b5761165b6151f1565b60209081029190910181019190915260408051611bdd60f21b81840152641ddbdc9b1960da1b60228201527f46756e6374696f6e5369676e617475720000000000000000000000000000000060308201528151808203909301835281019052610729906116c79061503d565b828686867c0100000000000000000000000000000000000000000000000000000000612ae7565b60408051600180825281830190925260009182919060208083019080368337019050509050826001600160a01b031660001b81600081518110611733576117336151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d526567697374727900000000000000000000000000000000000060308301526000916113e991015b6040516020818303038152906040526117a89061503d565b8360007e20010020000000000000000000000000000000000000000000000000000000612863565b60408051600180825281830190925260009160208083019080368337019050509050816001600160a01b031660001b81600081518110611812576118126151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d5265676973747279000000000000000000000000000000000000603082015281518082039093018352810190526102eb9061187e9061503d565b827e20010020000000000000000000000000000000000000000000000000000000612e3a565b60408051600280825260608201835260009260208301908036833701905050905082816000815181106118d9576118d96151f1565b602002602001018181525050816001600160a01b031660001b81600181518110611905576119056151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f5265736f7572636541636365737300000000000000000000000000000000000060308201528151808203909301835281019052610449906119719061503d565b827e01010001000000000000000000000000000000000000000000000000000000612e3a565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106119cd576119cd6151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015261044991015b604051602081830303815290604052611a3f9061503d565b82600085604051602001611a5a91151560f81b815260010190565b60408051601f198184030181529190527e010100010000000000000000000000000000000000000000000000000000006127d3565b6000611a9b838361311a565b604080516001808252818301909252919250600091606091839190602080830190803683370190505090508681600081518110611ada57611ada6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526115df90611b469061503d565b828686867e15020014010000000000000000000000000000000000000000000000000000612ae7565b60408051600180825281830190925260009160208083019080368337019050509050826001600160a01b031660001b81600081518110611bb157611bb16151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d52656769737472790000000000000000000000000000000000006030830152610449910161117b565b6040805160028082526060820183526000926020830190803683370190505090508381600081518110611c4457611c446151f1565b602002602001018181525050826001600160a01b031660001b81600181518110611c7057611c706151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152610b229101611a27565b613a3160f11b836001600160f01b03191614611cfe57613a3160f11b8384604051602001610e2f91815260200190565b610449836bffffffffffffffffffffffff19606085901b166bff0000000000000000000000605885901b161761314a565b6060600080611341878787876131de565b604080516002808252606082018352600092602083019080368337019050509050836fffffffffffffffffffffffffffffffff191681600081518110611d8857611d886151f1565b6020026020010181815250508281600181518110611da857611da86151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f496e7374616c6c65644d6f64756c6573000000000000000000000000000000006030830152610b2291015b604051602081830303815290604052611e1a9061503d565b6040516bffffffffffffffffffffffff19606086901b166020820152839060009060340160408051601f198184030181529190527e140100140000000000000000000000000000000000000000000000000000006127d3565b6000611e7f8484613256565b90506000815167ffffffffffffffff811115611e9d57611e9d614be9565b604051908082528060200260200182016040528015611ec6578160200160208202803683370190505b5090506000805b8351811015611f8b57846001600160a01b0316611f11858381518110611ef557611ef56151f1565b60200260200101516affffffffffffffffffffff191660601c90565b6001600160a01b031614611f8357838181518110611f3157611f316151f1565b6020026020010151838381518110611f4b57611f4b6151f1565b7fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000909216602092830291909101909101526001909101905b600101611ecd565b508082526107298686846132c1565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110611fd357611fd36151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015260009161207091015b6040516020818303038152906040526120489061503d565b8360007e01010001000000000000000000000000000000000000000000000000000000612863565b90506113e98160f81c90565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106120b2576120b26151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d6573706163654f776e657200000000000000000000000000000000000060308301526104499101611e02565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110612146576121466151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f4e616d65737061636544656c65676174000000000000000000000000000000006030830152610449910161117b565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106121da576121da6151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b73000000000000000000000000000000000000000000603083015261044991015b60405160208183030381529060405261224c9061503d565b6040517fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000851660208201528390600090603501604051602081830303815290604052613318565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e175546000906001600160a01b0316806122cd573391505090565b919050565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061230b5761230b6151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526000906112ca9061237a9061503d565b8360007e14010014000000000000000000000000000000000000000000000000000000612863565b806123d9576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006123e4826133c9565b9050600581111561242b576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401610350565b600061243683613406565b9050600061244483836150e8565b9050601c81111561248b576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401610350565b60005b828110156104465760ff601b82900360080286901c1660008190036124df576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081111561251a576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060010161248e565b8015801561252f575081155b1561255057604051635318beb960e01b815260006004820152602401610350565b600061255b836133c9565b9050600581111561258257604051635318beb960e01b815260048101829052602401610350565b600061258d84613406565b9050600061259b83836150e8565b9050601c8111156125c257604051635318beb960e01b815260048101829052602401610350565b60008060005b838110156126885760006125f56125df8a84613418565b60c58111156125f0576125f0615221565b613439565b111561263f57848110612634576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600190920191612680565b84811015612679576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b6001016125c8565b508382146126ac57604051635318beb960e01b815260048101839052602401610350565b8481146115df57604051635318beb960e01b815260048101829052602401610350565b60006126dc868686613499565b905060006126ea84846134cf565b905060006126f885856134ec565b60408051600180825281830190925291925060009190602080830190803683370190505090508981600081518110612732576127326151f1565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526127c79061279e9061503d565b828686867e60030220202000000000000000000000000000000000000000000000000000612ae7565b50505050505050505050565b61044685856127e28487613501565b8561353c565b604080517f737900000000000000000000000000000000000000000000000000000000000060208201526000602282018190527f756e6c696d6974656400000000000000000000000000000000000000000000006030830152910160405160208183030381529060405261285b9061503d565b909114919050565b600061289061287286866137b8565b60ff858116601b0360080285901c1661288b8587613501565b61380e565b95945050505050565b60006128a48361385f565b80156128b557506128b583836138a0565b9392505050565b6000606060006128cb86613958565b905060005b81518110156129a85760008282815181106128ed576128ed6151f1565b602002602001015190506129196001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612995576040517fc3323031000000000000000000000000000000000000000000000000000000008152606082901c9063c332303190612962908c908c908c90600401615237565b600060405180830381600087803b15801561297c57600080fd5b505af1158015612990573d6000803e3d6000fd5b505050505b50806129a081615207565b9150506128d0565b506129b587858888613a3f565b909350915060005b8151811015612a955760008282815181106129da576129da6151f1565b60200260200101519050612a066002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612a82576040517f973d8f99000000000000000000000000000000000000000000000000000000008152606082901c9063973d8f9990612a4f908c908c908c90600401615237565b600060405180830381600087803b158015612a6957600080fd5b505af1158015612a7d573d6000803e3d6000fd5b505050505b5080612a8d81615207565b9150506129bd565b505094509492505050565b805160208201fd5b60608282604051602001612ad09291909182526001600160e01b031916602082015260240190565b604051602081830303815290604052905092915050565b611bdd60f21b866001600160f01b03191603612b4057857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a986868686604051612b33949392919061529a565b60405180910390a2610729565b6000612b4b87613b1e565b905060005b8151811015612c2e576000828281518110612b6d57612b6d6151f1565b60200260200101519050612b996001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612c1b576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90612be8908c908c908c908c908c908c906004016152d9565b600060405180830381600087803b158015612c0257600080fd5b505af1158015612c16573d6000803e3d6000fd5b505050505b5080612c2681615207565b915050612b50565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051612c65949392919061529a565b60405180910390a26000612c7988886137b8565b90506000602087019050612c91826000895184613bb9565b6000612c9c856133c9565b1115612d20576000612cae8a8a613c79565b878155905060208601915060008060005b612cc8886133c9565b8160ff161015612d1b57612cdd8d8d83613ccf565b9250612cf88a8260ff166028026038011c64ffffffffff1690565b9150612d078360008488613bb9565b612d1182866150e8565b9450600101612cbf565b505050505b60005b83518110156127c7576000848281518110612d4057612d406151f1565b60200260200101519050612d6c6002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612dee576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90612dbb908e908e908e908e908e908e906004016152d9565b600060405180830381600087803b158015612dd557600080fd5b505af1158015612de9573d6000803e3d6000fd5b505050505b5080612df981615207565b915050612d23565b60006102ca8251603881901b1790565b606081604051602001612e249190615332565b6040516020818303038152906040529050919050565b611bdd60f21b836001600160f01b03191603612e8d57827f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0783604051612e80919061534e565b60405180910390a2505050565b6000612e9884613b1e565b905060005b8151811015612f75576000828281518110612eba57612eba6151f1565b60200260200101519050612ee66040826affffffffffffffffffffff1916613a2190919063ffffffff16565b15612f62576040517f9faeaf45000000000000000000000000000000000000000000000000000000008152606082901c90639faeaf4590612f2f90899089908990600401615361565b600060405180830381600087803b158015612f4957600080fd5b505af1158015612f5d573d6000803e3d6000fd5b505050505b5080612f6d81615207565b915050612e9d565b50837f0e1f72f429eb97e64878619984a91e687ae91610348b9ff4216782cc96e49d0784604051612fa6919061534e565b60405180910390a26000612fba85856137b8565b9050613013816000612fcb86613d4f565b67ffffffffffffffff811115612fe357612fe3614be9565b6040519080825280601f01601f19166020018201604052801561300d576020820181803683370190505b50613d72565b600061301e846133c9565b111561303f5760006130308686613c79565b905061303d816020613d88565b505b60005b825181101561072957600083828151811061305f5761305f6151f1565b6020026020010151905061308b6080826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613107576040517f83b5c95b000000000000000000000000000000000000000000000000000000008152606082901c906383b5c95b906130d4908a908a908a90600401615361565b600060405180830381600087803b1580156130ee57600080fd5b505af1158015613102573d6000803e3d6000fd5b505050505b508061311281615207565b915050613042565b604051606083811b6bffffffffffffffffffffffff1916602083015282151560f81b603483015290603501612ad0565b604080516001808252818301909252600091602080830190803683370190505090508281600081518110613180576131806151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308301526104499101612234565b60006060836001600160a01b031660006131f9858989613dc5565b6040516132069190615332565b60006040518083038185875af1925050503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b606091505b509097909650945050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613290576132906151f1565b60200260200101818152505060006132aa85836000613ddc565b90506128906132bc8260008451613e16565b613ea6565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106132f7576132f76151f1565b602002602001018181525050610b228482600061331386613eb7565b613ec7565b6000613322612293565b9050306001600160a01b038216036133455761334085858585613f02565b610446565b6040517f150f32620000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063150f32629061339090889088908890889060040161538a565b600060405180830381600087803b1580156133aa57600080fd5b505af11580156133be573d6000803e3d6000fd5b505050505050505050565b600060086001806133dc600260206153be565b6133e691906153be565b6133f091906153be565b6133fa91906153d1565b8260ff911c1692915050565b6000600860016133e6600260206153be565b6000601b8290036008028360ff911c1660c58111156128b5576128b5615221565b6000808260c581111561344e5761344e615221565b60ff169050606181101561346857601f1660010192915050565b60618360c581111561347c5761347c615221565b0361348a5750601492915050565b50600092915050565b50919050565b60408051602081018590529081018390526060818101839052906080015b60405160208183030381529060405290509392505050565b8151815160009181810160389190911b1760609190911b176128b5565b60608282604051602001612ad09291906153e8565b600080805b8360ff168110156108255761352860ff601b83900360080287901c16836150e8565b91508061353481615207565b915050613506565b611bdd60f21b846001600160f01b0319160361359357837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be84848460405161358693929190615417565b60405180910390a2610b22565b600061359f85856137b8565b905060006135ac86613b1e565b905060005b815181101561368b5760008282815181106135ce576135ce6151f1565b602002602001015190506135fa6004826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613678576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d90613645908b908b908b908b9060040161544a565b600060405180830381600087803b15801561365f57600080fd5b505af1158015613673573d6000803e3d6000fd5b505050505b508061368381615207565b9150506135b1565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8686866040516136c093929190615417565b60405180910390a26136db828565ffffffffffff1685613d72565b60005b81518110156115df5760008282815181106136fb576136fb6151f1565b602002602001015190506137276008826affffffffffffffffffffff1916613a2190919063ffffffff16565b156137a5576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba872190613772908b908b908b908b9060040161544a565b600060405180830381600087803b15801561378c57600080fd5b505af11580156137a0573d6000803e3d6000fd5b505050505b50806137b081615207565b9150506136de565b600082826040516020016137cd929190615483565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b60006020821061383457602082048401935060208281613830576138306154be565b0691505b508254600882021b602082900380841115610825576001850154600882021c82179150509392505050565b600061388b827f01ffc9a7000000000000000000000000000000000000000000000000000000006138a0565b80156102ca57506111f3826001600160e01b03195b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613941575060208210155b801561394d5750600081115b979650505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613992576139926151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f53797374656d486f6f6b730000000000000000000000000000000000000000006030830152600091613a0f91015b604051602081830303815290604052613a079061503d565b836000613ddc565b90506113e96132bc8260008451613e16565b60008160ff1682613a328560581c90565b1660ff1614905092915050565b60006060600080613a4f86613f3d565b90925090506001600160a01b038216613a6c5785610dae87610c83565b80613a7b57613a7b8689614035565b8615613acc577dffffffffffffffffffffffffffff000000000000000000000000000000008616616e7360f01b176000613ab48261404c565b9050613ac982613ac48b846150e8565b6140e6565b50505b6000613ad88760101b90565b71ffffffffffffffffffffffffffffffffffff191614613b0357613afe888884886131de565b613b0f565b613b0f8888848861417a565b90999098509650505050505050565b60408051600180825281830190925260609160009190602080830190803683370190505090508281600081518110613b5857613b586151f1565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f53746f7265486f6f6b73000000000000000000000000000000000000000000006030830152600091613a0f91016139ef565b8215613c335760208310613be357602083048401935060208381613bdf57613bdf6154be565b0692505b8215613c335760208390036000600019600885021c1990506008850281811c91508351811c9050811987541682821617875550818411613c24575050610b22565b50600194909401939182900391015b5b60208210613c555780518455600190930192601f1990910190602001613c34565b8115610b22576000600019600884021c198554835182169119161785555050505050565b60008282604051602001613c8e929190615483565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b60008383604051602001613ce4929190615483565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b60006008613d5f600260206153be565b613d6991906153d1565b9190911c919050565b61044983838351613d838560200190565b613bb9565b60006020613d9783601f6150e8565b613da191906154d4565b613dab90846150e8565b90505b808310156104495760008355600183019250613dae565b60608383836040516020016134b7939291906154f6565b60606113e9613dec858585613ccf565b6000613e1185613dfc89896141db565b9060ff166028026038011c64ffffffffff1690565b6141ee565b6000818311158015613e29575083518211155b613e65578383836040517f23230fa300000000000000000000000000000000000000000000000000000000815260040161035093929190615535565b60208401613e7384826150e8565b90506000613e8185856153be565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b606060006128b58360156000614211565b6060816128b5816015600061428c565b6000613ed385856141db565b90506000613ef0828560ff166028026038011c64ffffffffff1690565b905061072986868660008588886142e0565b6000613f0e85856141db565b90506000613f2b828560ff166028026038011c64ffffffffff1690565b905061072986868684600088886142e0565b60408051600180825281830190925260009182918291602080830190803683370190505090508381600081518110613f7757613f776151f1565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015281518082039093018352810190526000908190819061401090613fea9061503d565b857e1502001401000000000000000000000000000000000000000000000000000061469c565b5050602081015160349091015160609190911c9860f89190911c975095505050505050565b61403f82826147a4565b6102eb57610bea82610c83565b604080516001808252818301909252600091829190602080830190803683370190505090508281600081518110614085576140856151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e63657300000000000000000000000000000000000000000000000060308301526000916113e99101611790565b60408051600180825281830190925260009160208083019080368337019050509050828160008151811061411c5761411c6151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f42616c616e6365730000000000000000000000000000000000000000000000006030830152610449910161117b565b60006060836001600160a01b0316614193848888613dc5565b6040516141a09190615332565b600060405180830381855af49150503d8060008114613243576040519150601f19603f3d011682016040523d82523d6000602084013e613248565b60006128b56141ea8484613c79565b5490565b60405160208101601f19603f8484010116604052828252610825858585846147e7565b6060600061421f8560801c90565b90506fffffffffffffffffffffffffffffffff85166000858281614245576142456154be565b04905060405193506020840160208202810160405281855260005b82811015614280578451871c825293870193602090910190600101614260565b50505050509392505050565b8251606090600061429d85836153d1565b9050604051925060208301601f19603f83860101166040528184526000602088015b84821015614280578051871b835291870191600191909101906020016142bf565b613a3160f11b876001600160f01b0319161461431057613a3160f11b8788604051602001610e2f91815260200190565b600061432b828760ff166028026038011c64ffffffffff1690565b9050600083518564ffffffffff168361434491906153be565b61434e91906150e8565b9050808214158015614370575081614366868861555a565b64ffffffffff1614155b156143c0576040517fa65010b400000000000000000000000000000000000000000000000000000000815264ffffffffff8088166004830152808716602483015283166044820152606401610350565b818664ffffffffff161115614411576040517f7e8578d30000000000000000000000000000000000000000000000000000000081526004810183905264ffffffffff87166024820152604401610350565b600061441e8489846148b6565b9050600061442b8b613b1e565b905060005b815181101561450057600082828151811061444d5761444d6151f1565b602002602001015190506144796010826affffffffffffffffffffff1916613a2190919063ffffffff16565b156144ed57606081901c6001600160a01b03166355eb5a288e8e8e8e8e8d8f6040518863ffffffff1660e01b81526004016144ba979695949392919061557f565b600060405180830381600087803b1580156144d457600080fd5b505af11580156144e8573d6000803e3d6000fd5b505050505b50806144f881615207565b915050614430565b5064ffffffffff881660005b8a60ff168160ff16101561453f57614533878260ff166028026038011c64ffffffffff1690565b9091019060010161450c565b508b7faa63765a776145e5e6492f471ae097dfed11cd57a61bc2679dd43180422385b48c838b878c6040516145789594939291906155dd565b60405180910390a2508284146145995760006145948c8c613c79565b839055505b60006145a68c8c8c613ccf565b90506145ba818a64ffffffffff1689613d72565b5060005b815181101561468e5760008282815181106145db576145db6151f1565b602002602001015190506146076020826affffffffffffffffffffff1916613a2190919063ffffffff16565b1561467b57606081901c6001600160a01b031663635845338e8e8e8e8e8a8f6040518863ffffffff1660e01b8152600401614648979695949392919061557f565b600060405180830381600087803b15801561466257600080fd5b505af1158015614676573d6000803e3d6000fd5b505050505b508061468681615207565b9150506145be565b505050505050505050505050565b60606000606060006146ad85613d4f565b90506146ba878783614984565b935060006146c7866133c9565b90508015614799576146d988886141db565b935066ffffffffffffff841667ffffffffffffffff8111156146fd576146fd614be9565b6040519080825280601f01601f191660200182016040528015614727576020820181803683370190505b5092506020830160005b828160ff1610156147965760006147498b8b84613ccf565b90506000614766888460ff166028026038011c64ffffffffff1690565b905061477582600083876147e7565b61477f81856150e8565b93505050808061478e9061562f565b915050614731565b50505b505093509350939050565b60006147d7616e7360f01b7dffffffffffffffffffffffffffff00000000000000000000000000000000851617836149bd565b806128b557506128b583836149bd565b821561487057602083106148115760208304840193506020838161480d5761480d6154be565b0692505b82156148705760208390036000818410156148355750600019600884021c19614840565b50600019600882021c195b8554600886021b811984511682821617845250818411614861575050610b22565b50600194909401939182900391015b5b602082106148925783548152600190930192601f1990910190602001614871565b8115610b22576000600019600884021c198251865482169119161782525050505050565b600064ffffffffff8211156148fa576040517f4767058800000000000000000000000000000000000000000000000000000000815260048101839052602401610350565b8366ffffffffffffff811660ff851660280260380182901c64ffffffffff1680851061492c5780850382019150614934565b848103820391505b5064ffffffffff6038602860ff8816020181811b197fffffffffffffffffffffffffffffffffffffffffffffffffff000000000000009490941690921792909216918416901b1790509392505050565b6060816000036149a357506040805160208101909152600081526128b5565b60006149af85856137b8565b9050612890816000856141ee565b6040805160028082526060820183526000928392919060208301908036833701905050905083816000815181106149f6576149f66151f1565b602002602001018181525050826001600160a01b031660001b81600181518110614a2257614a226151f1565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f757263654163636573730000000000000000000000000000000000006030830152600091614a839101612030565b90506128908160f81c90565b80356001600160e01b0319811681146122cd57600080fd5b600060208284031215614ab957600080fd5b6128b582614a8f565b6001600160a01b0381168114610a5b57600080fd5b60008060408385031215614aea57600080fd5b823591506020830135614afc81614ac2565b809150509250929050565b60008083601f840112614b1957600080fd5b50813567ffffffffffffffff811115614b3157600080fd5b6020830191508360208260051b8501011115614b4c57600080fd5b9250929050565b60008060008060008060008060c0898b031215614b6f57600080fd5b88359750602089013596506040890135955060608901359450608089013567ffffffffffffffff80821115614ba357600080fd5b614baf8c838d01614b07565b909650945060a08b0135915080821115614bc857600080fd5b50614bd58b828c01614b07565b999c989b5096995094979396929594505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614c2857614c28614be9565b604052919050565b600082601f830112614c4157600080fd5b813567ffffffffffffffff811115614c5b57614c5b614be9565b614c6e6020601f19601f84011601614bff565b818152846020838601011115614c8357600080fd5b816020850160208301376000918101602001919091529392505050565b600080600060608486031215614cb557600080fd5b8335614cc081614ac2565b925060208401359150604084013567ffffffffffffffff811115614ce357600080fd5b614cef86828701614c30565b9150509250925092565b60008060408385031215614d0c57600080fd5b82359150602083013567ffffffffffffffff811115614d2a57600080fd5b614d3685828601614c30565b9150509250929050565b600080600060608486031215614d5557600080fd5b833592506020840135614d6781614ac2565b915060408401358015158114614d7c57600080fd5b809150509250925092565b803560ff811681146122cd57600080fd5b600080600060608486031215614dad57600080fd5b833592506020840135614dbf81614ac2565b9150614dcd60408501614d87565b90509250925092565b600080600060608486031215614deb57600080fd5b83359250602084013567ffffffffffffffff811115614e0957600080fd5b614e1586828701614c30565b925050614dcd60408501614a8f565b60008060408385031215614e3757600080fd5b8235614e4281614ac2565b9150602083013567ffffffffffffffff811115614d2a57600080fd5b600060208284031215614e7057600080fd5b5035919050565b600080600060608486031215614e8c57600080fd5b8335925060208401359150604084013567ffffffffffffffff811115614ce357600080fd5b60005b83811015614ecc578181015183820152602001614eb4565b50506000910152565b60008151808452614eed816020860160208601614eb1565b601f01601f19169290920160200192915050565b8281526040602082015260006113e96040830184614ed5565b600067ffffffffffffffff80841115614f3557614f35614be9565b8360051b6020614f46818301614bff565b868152918501918181019036841115614f5e57600080fd5b865b84811015614f9257803586811115614f785760008081fd5b614f8436828b01614c30565b845250918301918301614f60565b50979650505050505050565b60008451614fb0818460208901614eb1565b80830190507f5f000000000000000000000000000000000000000000000000000000000000008082528551614fec816001850160208a01614eb1565b60019201918201528351615007816002840160208801614eb1565b0160020195945050505050565b6001600160f01b0319841681528260208201526060604082015260006128906060830184614ed5565b805160208083015191908110156134935760001960209190910360031b1b16919050565b6020815260006128b56020830184614ed5565b60006020828403121561508657600080fd5b81516fffffffffffffffffffffffffffffffff19811681146128b557600080fd5b6040815260006150ba6040830185614ed5565b90506001600160a01b03831660208301529392505050565b634e487b7160e01b600052601160045260246000fd5b808201808211156102ca576102ca6150d2565b6001600160f01b03198416815260007f3a000000000000000000000000000000000000000000000000000000000000008060028401528451615144816003860160208901614eb1565b808401905081600382015284519150615164826004830160208801614eb1565b0160040195945050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156151e4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526151d2858351614ed5565b94509285019290850190600101615198565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6000600019820361521a5761521a6150d2565b5060010190565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b03841681528260208201526060604082015260006128906060830184614ed5565b600081518084526020808501945080840160005b8381101561528f57815187529582019590820190600101615273565b509495945050505050565b6080815260006152ad608083018761525f565b82810360208401526152bf8187614ed5565b9050846040840152828103606084015261394d8185614ed5565b86815260c0602082015260006152f260c083018861525f565b82810360408401526153048188614ed5565b9050856060840152828103608084015261531e8186614ed5565b9150508260a0830152979650505050505050565b60008251615344818460208701614eb1565b9190910192915050565b6020815260006128b5602083018461525f565b83815260606020820152600061537a606083018561525f565b9050826040830152949350505050565b8481526080602082015260006153a3608083018661525f565b60ff85166040840152828103606084015261394d8185614ed5565b818103818111156102ca576102ca6150d2565b80820281158282048414176102ca576102ca6150d2565b600083516153fa818460208801614eb1565b83519083019061540e818360208801614eb1565b01949350505050565b60608152600061542a606083018661525f565b65ffffffffffff8516602084015282810360408401526113538185614ed5565b848152608060208201526000615463608083018661525f565b65ffffffffffff85166040840152828103606084015261394d8185614ed5565b82815260006020808301845182860160005b828110156154b157815184529284019290840190600101615495565b5091979650505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826154f157634e487b7160e01b600052601260045260246000fd5b500490565b60008451615508818460208901614eb1565b60609490941b6bffffffffffffffffffffffff191691909301908152601481019190915260340192915050565b6060815260006155486060830186614ed5565b60208301949094525060400152919050565b64ffffffffff818116838216019080821115615578576155786150d2565b5092915050565b87815260e06020820152600061559860e083018961525f565b60ff8816604084015264ffffffffff87811660608501528616608084015260a0830185905282810360c08401526155cf8185614ed5565b9a9950505050505050505050565b60a0815260006155f060a083018861525f565b65ffffffffffff8716602084015264ffffffffff8616604084015284606084015282810360808401526156238185614ed5565b98975050505050505050565b600060ff821660ff8103615645576156456150d2565b6001019291505056fea164736f6c6343000815000a6101006040523480156200001257600080fd5b5060405162004c6d38038062004c6d833981016040819052620000359162000071565b6001600160a01b0393841660805291831660a052821660c0521660e052620000d9565b6001600160a01b03811681146200006e57600080fd5b50565b600080600080608085870312156200008857600080fd5b8451620000958162000058565b6020860151909450620000a88162000058565b6040860151909350620000bb8162000058565b6060860151909250620000ce8162000058565b939692955090935050565b60805160a05160c05160e051614b4c62000121600039600081816106a20152818161159201526116210152600061063a015260006105d2015260006105510152614b4c6000f3fe608060405234801561001057600080fd5b506004361061007d5760003560e01c806317d7de7c1161005b57806317d7de7c146100ec57806345ec93541461011a5780637c5b03351461012d578063e1af802c1461014057600080fd5b806301ffc9a714610082578063119df25f146100aa57806313861fb5146100d7575b600080fd5b610095610090366004614310565b610148565b60405190151581526020015b60405180910390f35b6100b261022d565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100a1565b6100ea6100e5366004614368565b61023c565b005b6040517f636f72650000000000000000000000000000000000000000000000000000000081526020016100a1565b604051601f1936013581526020016100a1565b6100ea61013b366004614368565b61026e565b6100b2610289565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780ac2fc0000000000000000000000000000000000000000000000000000000014806101db57507fffffffff0000000000000000000000000000000000000000000000000000000082167fb5dee12700000000000000000000000000000000000000000000000000000000145b8061022757507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b6000610237610293565b905090565b6040517fea8b184c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102766102c5565b61027e61050f565b6102866106c8565b50565b6000610237610bcb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc36013560601c806102c25750335b90565b6102cd610c17565b6102d5610c2f565b6102dd610cd4565b6102e5610d5c565b6102ed610dfc565b6102f5610e84565b6102fd610f04565b610305610f8c565b61030d61102c565b6103156110cc565b61031d61116a565b610325611208565b60408051616e7360f01b6020820152600060228201819052603082015261036791015b60405160208183030381529060405261036090614419565b6001611290565b60408051616e7360f01b602082015260006022820181905260308201526103af91015b6040516020818303038152906040526103a290614419565b6103aa61022d565b611375565b60408051616e7360f01b602082015260006022820181905260308201526103f991015b6040516020818303038152906040526103ea90614419565b6103f261022d565b6001611483565b60408051616e7360f01b60208201526473746f726560d81b6022820152600060308201526104279101610348565b60408051616e7360f01b60208201526473746f726560d81b602282015260006030820152610455910161038a565b60408051616e7360f01b60208201526473746f726560d81b60228201526000603082015261048391016103d2565b60408051616e7360f01b6020820152641ddbdc9b1960da1b6022820152600060308201526104b19101610348565b60408051616e7360f01b6020820152641ddbdc9b1960da1b6022820152600060308201526104df910161038a565b60408051616e7360f01b6020820152641ddbdc9b1960da1b60228201526000603082015261050d91016103d2565b565b6040805161737960f01b6020820152600060228201527f4163636573734d616e6167656d656e74000000000000000000000000000000006030820152610590917f000000000000000000000000000000000000000000000000000000000000000091015b60405160208183030381529060405261058b90614419565b611555565b6040805161737960f01b6020820152600060228201527f42616c616e63655472616e73666572000000000000000000000000000000000060308201526105f8917f00000000000000000000000000000000000000000000000000000000000000009101610573565b6040805161737960f01b6020820152600060228201527f426174636843616c6c00000000000000000000000000000000000000000000006030820152610660917f00000000000000000000000000000000000000000000000000000000000000009101610573565b6040805161737960f01b6020820152600060228201527f436f7265526567697374726174696f6e00000000000000000000000000000000603082015261050d917f00000000000000000000000000000000000000000000000000000000000000009101610573565b600060405180606001604052806040518060400160405280601c81526020017f6772616e7441636365737328627974657333322c61646472657373290000000081525081526020016040518060400160405280601d81526020017f7265766f6b6541636365737328627974657333322c61646472657373290000008152508152602001604051806060016040528060228152602001614b1e602291399052905060005b60038110156107fb576040805161737960f01b6020820152600060228201527f4163636573734d616e6167656d656e740000000000000000000000000000000060308201526107e991016040516020818303038152906040526107cd90614419565b8383600381106107df576107df61443d565b6020020151611612565b806107f381614469565b91505061076b565b506040805160a0810182526033918101828152600092829190614ac2606084013981526020016040518060600160405280603181526020016149b7603191399052905060005b60028110156108c8576040805161737960f01b6020820152600060228201527f42616c616e63655472616e73666572000000000000000000000000000000000060308201526108b691015b6040516020818303038152906040526108a490614419565b8383600281106107df576107df61443d565b806108c081614469565b915050610841565b50600060405180604001604052806040518060400160405280601c81526020017f626174636843616c6c2828627974657333322c6279746573295b5d29000000008152508152602001604051806060016040528060288152602001614a43602891399052905060005b6002811015610992576040805161737960f01b6020820152600060228201527f426174636843616c6c00000000000000000000000000000000000000000000006030820152610980910161088c565b8061098a81614469565b915050610931565b50604080516101c081018252601c61018082019081527f696e7374616c6c4d6f64756c6528616464726573732c627974657329000000006101a08301528152815160608101835282815260009260208084019291906149029083013981526020016040518060600160405280602881526020016149e86028913981526020016040518060600160405280602481526020016148de6024913981526020016040518060400160405280601a81526020017f72656769737465724e616d6573706163652862797465733332290000000000008152508152602001604051806060016040528060298152602001614af5602991398152602001604051806060016040528060258152602001614a6b60259139815260200160405180606001604052806024815260200161499360249139815260200160405180606001604052806028815260200161496b602891398152602001604051806060016040528060338152602001614a10603391398152602001604051806060016040528060298152602001614942602991398152602001604051806060016040528060328152602001614a90603291399052905060005b600c811015610bc4576040805161737960f01b6020820152600060228201527f436f7265526567697374726174696f6e000000000000000000000000000000006030820152610bb29101604051602081830303815290604052610ba090614419565b8383600c81106107df576107df61443d565b80610bbc81614469565b915050610b3e565b5050505050565b7f629a4c26e296b22a8e0856e9f6ecb2d1008d7e00081111962cd175fa7488e1755460009073ffffffffffffffffffffffffffffffffffffffff1680610c12573391505090565b919050565b610c1f6116b9565b610c27611759565b61050d6117f7565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610c8f90614419565b7e14010014000000000000000000000000000000000000000000000000000000610cb761187f565b610cbf6118f7565b610cc7611931565b610ccf6119b6565b611a2d565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f42616c616e636573000000000000000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610d3490614419565b630100080160dd1b610d4461187f565b610d4c611b01565b610d54611931565b610ccf611b3b565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f496e7374616c6c65644d6f64756c657300000000000000000000000000000000603082015261050d9101604051602081830303815290604052610dbc90614419565b7e14010014000000000000000000000000000000000000000000000000000000610de4611bb2565b610dec6118f7565b610df4611c31565b610ccf611cfb565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f5573657244656c65676174696f6e436f00000000000000000000000000000000603082015261050d9101604051602081830303815290604052610e5c90614419565b630100080160dd1b610e6c611d72565b610e7461187f565b610e7c611df1565b610ccf611ebb565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f4e616d65737061636544656c6567617400000000000000000000000000000000603082015261050d9101604051602081830303815290604052610ee490614419565b630100080160dd1b610ef461187f565b610efc61187f565b610e7c611931565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f5265736f75726365416363657373000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610f6490614419565b630101000160d81b610f74611f32565b610f7c611f6c565b610f84611fa6565b610ccf612070565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d7300000000000000000000000000000000000000000000000000603082015261050d9101604051602081830303815290604052610fec90614419565b7e1502001401000000000000000000000000000000000000000000000000000061101461187f565b61101c6120e7565b611024612166565b610ccf6121dd565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f46756e6374696f6e53656c6563746f7200000000000000000000000000000000603082015261050d910160405160208183030381529060405261108c90614419565b7e240200200400000000000000000000000000000000000000000000000000006110b46122a7565b6110bc6122e1565b6110c4612360565b610ccf6123d7565b60408051611bdd60f21b6020820152641ddbdc9b1960da1b60228201527f46756e6374696f6e5369676e6174757200000000000000000000000000000000603082015261050d910160405160208183030381529060405261112c90614419565b7c01000000000000000000000000000000000000000000000000000000006111526122a7565b61115a6124a1565b611162612360565b610ccf6124db565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d486f6f6b73000000000000000000000000000000000000000000603082015261050d91016040516020818303038152906040526111ca90614419565b7c01000000000000000000000000000000000000000000000000000000006111f061187f565b6111f8612552565b611200612166565b610ccf61258c565b60408051613a3160f11b6020820152641ddbdc9b1960da1b60228201527f53797374656d5265676973747279000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261126890614419565b630100080160dd1b6112786118f7565b61128061187f565b611288612603565b610ccf612166565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106112c6576112c661443d565b60209081029190910181019190915260408051613a3160f11b928101929092526473746f726560d81b60228301527f5265736f75726365496473000000000000000000000000000000000000000000603083015261137091015b60405160208183030381529060405261133890614419565b8260008560405160200161135391151560f81b815260010190565b60408051601f19818403018152919052630101000160d81b61267a565b505050565b6040805160018082528183019092526000916020808301908036833701905050905082816000815181106113ab576113ab61443d565b60209081029190910181019190915260408051613a3160f11b81840152641ddbdc9b1960da1b60228201527f4e616d6573706163654f776e6572000000000000000000000000000000000000603082015281518082039093018352810190526113709061141790614419565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606086901b166020820152839060009060340160408051601f198184030181529190527e1401001400000000000000000000000000000000000000000000000000000061267a565b60408051600280825260608201835260009260208301908036833701905050905083816000815181106114b8576114b861443d565b6020026020010181815250508273ffffffffffffffffffffffffffffffffffffffff1660001b816001815181106114f1576114f161443d565b60209081029190910181019190915260408051613a3160f11b92810192909252641ddbdc9b1960da1b60228301527f5265736f75726365416363657373000000000000000000000000000000000000603083015261154f9101611320565b50505050565b61137061156061022d565b6040516024810184905273ffffffffffffffffffffffffffffffffffffffff85166044820152600160648201526000907f00000000000000000000000000000000000000000000000000000000000000009060840160408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f3350b6a90000000000000000000000000000000000000000000000000000000017905261268f565b61137061161d61022d565b60007f00000000000000000000000000000000000000000000000000000000000000008585868051906020012060405160240161165c939291906144d3565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f742d61180000000000000000000000000000000000000000000000000000000017905261268f565b60408051613a3160f11b60208201526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261171990614419565b7e6003022020200000000000000000000000000000000000000000000000000061174161187f565b6117496126bc565b61175161280b565b610ccf612882565b60408051613a3160f11b60208201526473746f726560d81b60228201527f53746f7265486f6f6b7300000000000000000000000000000000000000000000603082015261050d91016040516020818303038152906040526117b990614419565b7c01000000000000000000000000000000000000000000000000000000006117df61187f565b6117e7612552565b6117ef61280b565b610ccf612a4a565b60408051613a3160f11b60208201526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015261050d910160405160208183030381529060405261185790614419565b630101000160d81b61186761187f565b61186f611f6c565b611877612ac1565b610ccf612b38565b60408051600180825281830190925260009182919060208083019080368337019050509050605f816000815181106118b9576118b961443d565b602002602001019060c58111156118d2576118d261451e565b908160c58111156118e5576118e561451e565b9052506118f181612baf565b91505090565b604080516001808252818301909252600091829190602080830190803683370190505090506061816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816119485790505090506040518060400160405280600b81526020017f6e616d6573706163654964000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b602002602001018190525090565b604080516001808252818301909252606091816020015b60608152602001906001900390816119cd5790505090506040518060400160405280600581526020017f6f776e6572000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6000611a37610bcb565b90503073ffffffffffffffffffffffffffffffffffffffff821603611a6957611a64878787878787612d73565b611af8565b6040517f0ba51f4900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821690630ba51f4990611ac5908a908a908a908a908a908a9060040161458c565b600060405180830381600087803b158015611adf57600080fd5b505af1158015611af3573d6000803e3d6000fd5b505050505b50505050505050565b60408051600180825281830190925260009182919060208083019080368337019050509050601f816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611b525790505090506040518060400160405280600781526020017f62616c616e636500000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050604f81600081518110611bec57611bec61443d565b602002602001019060c5811115611c0557611c0561451e565b908160c5811115611c1857611c1861451e565b81525050605f816001815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611c475790505090506040518060400160405280600a81526020017f6d6f64756c654e616d650000000000000000000000000000000000000000000081525081600081518110611ca757611ca761443d565b60200260200101819052506040518060400160405280600d81526020017f617267756d656e74734861736800000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611d125790505090506040518060400160405280600d81526020017f6d6f64756c654164647265737300000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050606181600081518110611dac57611dac61443d565b602002602001019060c5811115611dc557611dc561451e565b908160c5811115611dd857611dd861451e565b815250506061816001815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611e075790505090506040518060400160405280600981526020017f64656c656761746f72000000000000000000000000000000000000000000000081525081600081518110611e6757611e6761443d565b60200260200101819052506040518060400160405280600981526020017f64656c6567617465650000000000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081611ed25790505090506040518060400160405280601381526020017f64656c65676174696f6e436f6e74726f6c496400000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600280825260608201835260009283929190602083019080368337019050509050605f81600081518110611dac57611dac61443d565b604080516001808252818301909252600091829190602080830190803683370190505090506060816000815181106118b9576118b961443d565b6040805160028082526060828101909352816020015b6060815260200190600190039081611fbc5790505090506040518060400160405280600a81526020017f7265736f757263654964000000000000000000000000000000000000000000008152508160008151811061201c5761201c61443d565b60200260200101819052506040518060400160405280600681526020017f63616c6c65720000000000000000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816120875790505090506040518060400160405280600681526020017f6163636573730000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516002808252606082018352600092839291906020830190803683370190505090506061816000815181106121215761212161443d565b602002602001019060c581111561213a5761213a61451e565b908160c581111561214d5761214d61451e565b815250506060816001815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b606081526020019060019003908161217d5790505090506040518060400160405280600881526020017f73797374656d4964000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160028082526060828101909352816020015b60608152602001906001900390816121f35790505090506040518060400160405280600681526020017f73797374656d0000000000000000000000000000000000000000000000000000815250816000815181106122535761225361443d565b60200260200101819052506040518060400160405280600c81526020017f7075626c69634163636573730000000000000000000000000000000000000000815250816001815181106119a8576119a861443d565b604080516001808252818301909252600091829190602080830190803683370190505090506043816000815181106118b9576118b961443d565b60408051600280825260608201835260009283929190602083019080368337019050509050605f8160008151811061231b5761231b61443d565b602002602001019060c58111156123345761233461451e565b908160c58111156123475761234761451e565b815250506043816001815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816123775790505090506040518060400160405280601081526020017f66756e6374696f6e53656c6563746f7200000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160028082526060828101909352816020015b60608152602001906001900390816123ed5790505090506040518060400160405280600881526020017f73797374656d49640000000000000000000000000000000000000000000000008152508160008151811061244d5761244d61443d565b60200260200101819052506040518060400160405280601681526020017f73797374656d46756e6374696f6e53656c6563746f7200000000000000000000815250816001815181106119a8576119a861443d565b6040805160018082528183019092526000918291906020808301908036833701905050905060c5816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816124f25790505090506040518060400160405280601181526020017f66756e6374696f6e5369676e6174757265000000000000000000000000000000815250816000815181106119a8576119a861443d565b6040805160018082528183019092526000918291906020808301908036833701905050905060b6816000815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816125a35790505090506040518060400160405280600581526020017f76616c7565000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b606081526020019060019003908161261a5790505090506040518060400160405280600681526020017f73797374656d0000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b610bc48585612689848761304b565b8561308e565b60606000806126a087878787613322565b91509150816126b2576126b2816133a3565b9695505050505050565b60408051600580825260c082019092526000918291906020820160a080368337019050509050605f816000815181106126f7576126f761443d565b602002602001019060c58111156127105761271061451e565b908160c58111156127235761272361451e565b81525050605f8160018151811061273c5761273c61443d565b602002602001019060c58111156127555761275561451e565b908160c58111156127685761276861451e565b81525050605f816002815181106127815761278161443d565b602002602001019060c581111561279a5761279a61451e565b908160c58111156127ad576127ad61451e565b8152505060c4816003815181106127c6576127c661443d565b602002602001019060c58111156127df576127df61451e565b908160c58111156127f2576127f261451e565b8152505060c4816004815181106118b9576118b961443d565b604080516001808252818301909252606091816020015b60608152602001906001900390816128225790505090506040518060400160405280600781526020017f7461626c65496400000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b60408051600580825260c08201909252606091816020015b606081526020019060019003908161289a5790505090506040518060400160405280600b81526020017f6669656c644c61796f7574000000000000000000000000000000000000000000815250816000815181106128fa576128fa61443d565b60200260200101819052506040518060400160405280600981526020017f6b6579536368656d6100000000000000000000000000000000000000000000008152508160018151811061294e5761294e61443d565b60200260200101819052506040518060400160405280600b81526020017f76616c7565536368656d61000000000000000000000000000000000000000000815250816002815181106129a2576129a261443d565b60200260200101819052506040518060400160405280601281526020017f616269456e636f6465644b65794e616d65730000000000000000000000000000815250816003815181106129f6576129f661443d565b60200260200101819052506040518060400160405280601481526020017f616269456e636f6465644669656c644e616d6573000000000000000000000000815250816004815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612a615790505090506040518060400160405280600581526020017f686f6f6b73000000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612ad85790505090506040518060400160405280600a81526020017f7265736f75726365496400000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b604080516001808252818301909252606091816020015b6060815260200190600190039081612b4f5790505090506040518060400160405280600681526020017f6578697374730000000000000000000000000000000000000000000000000000815250816000815181106119a8576119a861443d565b6000601c82511115612be2578151604051635318beb960e01b8152600401612bd991815260200190565b60405180910390fd5b60008080805b8551811015612cbd576000612c26878381518110612c0857612c0861443d565b602002602001015160c5811115612c2157612c2161451e565b6133ab565b905080600003612c3b57600190920191612c73565b8215612c73576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80840193506008826004601f030302878381518110612c9457612c9461443d565b602002602001015160c5811115612cad57612cad61451e565b901b949094179350600101612be8565b506005811115612ce357604051635318beb960e01b815260048101829052602401612bd9565b84518190036008612cf6600260206145d6565b612d0091906145e9565b83901b939093179260086001612d18600260206145d6565b612d2291906145d6565b612d2c91906145e9565b81901b93909317926008600180612d45600260206145d6565b612d4f91906145d6565b612d5991906145d6565b612d6391906145e9565b9190911b92909217949350505050565b613a3160f11b867fffff0000000000000000000000000000000000000000000000000000000000001614801590612dd15750611bdd60f21b867fffff0000000000000000000000000000000000000000000000000000000000001614155b15612e3257613a3160f11b8687604051602001612df091815260200190565b60408051601f19818403018152908290527f31b46683000000000000000000000000000000000000000000000000000000008252612bd9939291600401614600565b612e3b8561340b565b612e4684600161358c565b612e5183600061358c565b60e084901c60e885901c0160ff16825114612eb15760e084901c60e885901c0160ff1682516040517f0f72cb9800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b60e085901c60e886901c0160ff16815114612f115760e085901c60e886901c0160ff1681516040517f7dec4c0000000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b60e085901c60e886901c0160ff1660e084901c60e885901c0160ff1614612f895760e085901c60e886901c0160ff1660e084901c60e885901c0160ff166040517ff29d4d8800000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401612bd9565b612f9286613733565b15612fec578586604051602001612fab91815260200190565b60408051601f19818403018152908290527fdfaaf9cf000000000000000000000000000000000000000000000000000000008252612bd99291600401614641565b6130388686868686604051602001613004919061465a565b60405160208183030381529060405286604051602001613024919061465a565b6040516020818303038152906040526137ff565b613043866001611290565b505050505050565b600080805b8360ff168110156130865761307260ff601b83900360080287901c168361466d565b91508061307e81614469565b915050613050565b509392505050565b611bdd60f21b847fffff00000000000000000000000000000000000000000000000000000000000016036130fd57837f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be8484846040516130f0939291906146bb565b60405180910390a261154f565b60006131098585613903565b9050600061311686613959565b905060005b81518110156131f55760008282815181106131385761313861443d565b602002602001015190506131646004826affffffffffffffffffffff1916613a2190919063ffffffff16565b156131e2576040517f964f667d000000000000000000000000000000000000000000000000000000008152606082901c9063964f667d906131af908b908b908b908b906004016146ee565b600060405180830381600087803b1580156131c957600080fd5b505af11580156131dd573d6000803e3d6000fd5b505050505b50806131ed81614469565b91505061311b565b50857f8c0b5119d4cec7b284c6b1b39252a03d1e2f2d7451a5895562524c113bb952be86868660405161322a939291906146bb565b60405180910390a2613245828565ffffffffffff1685613a3f565b60005b8151811015611af85760008282815181106132655761326561443d565b602002602001015190506132916008826affffffffffffffffffffff1916613a2190919063ffffffff16565b1561330f576040517fa8ba8721000000000000000000000000000000000000000000000000000000008152606082901c9063a8ba8721906132dc908b908b908b908b906004016146ee565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505b508061331a81614469565b915050613248565b600060608373ffffffffffffffffffffffffffffffffffffffff16613348848888613a55565b6040516133559190614732565b600060405180830381855af49150503d8060008114613390576040519150601f19603f3d011682016040523d82523d6000602084013e613395565b606091505b509097909650945050505050565b805160208201fd5b6000808260c58111156133c0576133c061451e565b60ff16905060618110156133da57601f1660010192915050565b60618360c58111156133ee576133ee61451e565b036133fc5750601492915050565b50600092915050565b50919050565b80613442576040517f220c0f6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061344d82613a84565b90506005811115613494576040517f7f2372c30000000000000000000000000000000000000000000000000000000081526004810182905260056024820152604401612bd9565b600061349f83613ac1565b905060006134ad838361466d565b9050601c8111156134f4576040517f4a8a06ad00000000000000000000000000000000000000000000000000000000815260048101829052601c6024820152604401612bd9565b60005b82811015610bc45760ff601b82900360080286901c166000819003613548576040517fbf1ac38300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020811115613583576040517f2392baa400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016134f7565b80158015613598575081155b156135b957604051635318beb960e01b815260006004820152602401612bd9565b60006135c483613a84565b905060058111156135eb57604051635318beb960e01b815260048101829052602401612bd9565b60006135f684613ac1565b90506000613604838361466d565b9050601c81111561362b57604051635318beb960e01b815260048101829052602401612bd9565b60008060005b838110156136ec5760006136596136488a84613ad3565b60c5811115612c2157612c2161451e565b11156136a357848110613698576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909201916136e4565b848110156136dd576040517ff1e56be400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001909101905b600101613631565b5083821461371057604051635318beb960e01b815260048101839052602401612bd9565b848114611af857604051635318beb960e01b815260048101829052602401612bd9565b60408051600180825281830190925260009182919060208083019080368337019050509050828160008151811061376c5761376c61443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5265736f75726365496473000000000000000000000000000000000000000000603082015281518082039093018352810190526000906137eb906137db90614419565b836000630101000160d81b613afb565b90506137f78160f81c90565b949350505050565b600061380c868686613b31565b9050600061381a8484613b53565b905060006138288585613b70565b604080516001808252818301909252919250600091906020808301908036833701905050905089816000815181106138625761386261443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f5461626c65730000000000000000000000000000000000000000000000000000603082015281518082039093018352810190526138f7906138ce90614419565b828686867e60030220202000000000000000000000000000000000000000000000000000613b9c565b50505050505050505050565b6000828260405160200161391892919061474e565b60408051601f1981840301815291905280516020909101207f86425bff6b57326c7859e89024fe4f238ca327a1ae4a230180dd2f0e88aaa7d9189392505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106139935761399361443d565b60209081029190910181019190915260408051613a3160f11b818401526473746f726560d81b60228201527f53746f7265486f6f6b730000000000000000000000000000000000000000000060308201528151808203909301835281019052600090613a0a90613a0290614419565b836000613ece565b90506137f7613a1c8260008451613f08565b613f98565b60008160ff1682613a328560581c90565b1660ff1614905092915050565b61137083838351613a508560200190565b613fa9565b6060838383604051602001613a6c93929190614789565b60405160208183030381529060405290509392505050565b60006008600180613a97600260206145d6565b613aa191906145d6565b613aab91906145d6565b613ab591906145e9565b8260ff911c1692915050565b600060086001613aa1600260206145d6565b6000601b8290036008028360ff911c1660c5811115613af457613af461451e565b9392505050565b6000613b28613b0a8686613903565b60ff858116601b0360080285901c16613b23858761304b565b614069565b95945050505050565b6040805160208101859052908101839052606081810183905290608001613a6c565b8151815160009181810160389190911b1760609190911b17613af4565b60608282604051602001613b859291906147db565b604051602081830303815290604052905092915050565b611bdd60f21b867fffff0000000000000000000000000000000000000000000000000000000000001603613c0d57857f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a986868686604051613c00949392919061480a565b60405180910390a2613043565b6000613c1887613959565b905060005b8151811015613cfb576000828281518110613c3a57613c3a61443d565b60200260200101519050613c666001826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613ce8576040517f57066c9c000000000000000000000000000000000000000000000000000000008152606082901c906357066c9c90613cb5908c908c908c908c908c908c90600401614849565b600060405180830381600087803b158015613ccf57600080fd5b505af1158015613ce3573d6000803e3d6000fd5b505050505b5080613cf381614469565b915050613c1d565b50867f8dbb3a9672eebfd3773e72dd9c102393436816d832c7ba9e1e1ac8fcadcac7a987878787604051613d32949392919061480a565b60405180910390a26000613d468888613903565b90506000602087019050613d5e826000895184613fa9565b6000613d6985613a84565b1115613ded576000613d7b8a8a6140ba565b878155905060208601915060008060005b613d9588613a84565b8160ff161015613de857613daa8d8d83614110565b9250613dc58a8260ff166028026038011c64ffffffffff1690565b9150613dd48360008488613fa9565b613dde828661466d565b9450600101613d8c565b505050505b60005b83518110156138f7576000848281518110613e0d57613e0d61443d565b60200260200101519050613e396002826affffffffffffffffffffff1916613a2190919063ffffffff16565b15613ebb576040517f5b28cdaf000000000000000000000000000000000000000000000000000000008152606082901c90635b28cdaf90613e88908e908e908e908e908e908e90600401614849565b600060405180830381600087803b158015613ea257600080fd5b505af1158015613eb6573d6000803e3d6000fd5b505050505b5080613ec681614469565b915050613df0565b60606137f7613ede858585614110565b6000613f0385613eee8989614190565b9060ff166028026038011c64ffffffffff1690565b6141a3565b6000818311158015613f1b575083518211155b613f57578383836040517f23230fa3000000000000000000000000000000000000000000000000000000008152600401612bd9939291906148a2565b60208401613f65848261466d565b90506000613f7385856145d6565b6fffffffffffffffffffffffffffffffff1660809290921b9190911795945050505050565b60606000613af483601560006141c6565b82156140235760208310613fd357602083048401935060208381613fcf57613fcf6148c7565b0692505b82156140235760208390036000600019600885021c1990506008850281811c91508351811c905081198754168282161787555081841161401457505061154f565b50600194909401939182900391015b5b602082106140455780518455600190930192601f1990910190602001614024565b811561154f576000600019600884021c198554835182169119161785555050505050565b60006020821061408f5760208204840193506020828161408b5761408b6148c7565b0691505b508254600882021b602082900380841115613086576001850154600882021c82179150509392505050565b600082826040516020016140cf92919061474e565b60408051601f1981840301815291905280516020909101207f14e2fcc58e58e68ec7edc30c8d50dccc3ce2714a623ec81f46b6a63922d76569189392505050565b6000838360405160200161412592919061474e565b604051602081830303815290604052805190602001208260f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167f3b4102da22e32d82fc925482184f16c09fd4281692720b87d124aef6da48a0f1181860001c90509392505050565b6000613af461419f84846140ba565b5490565b60405160208101601f19603f848401011660405282825261308685858584614241565b606060006141d48560801c90565b90506fffffffffffffffffffffffffffffffff851660008582816141fa576141fa6148c7565b04905060405193506020840160208202810160405281855260005b82811015614235578451871c825293870193602090910190600101614215565b50505050509392505050565b82156142ca576020831061426b57602083048401935060208381614267576142676148c7565b0692505b82156142ca57602083900360008184101561428f5750600019600884021c1961429a565b50600019600882021c195b8554600886021b8119845116828216178452508184116142bb57505061154f565b50600194909401939182900391015b5b602082106142ec5783548152600190930192601f19909101906020016142cb565b811561154f576000600019600884021c198251865482169119161782525050505050565b60006020828403121561432257600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114613af457600080fd5b634e487b7160e01b600052604160045260246000fd5b60006020828403121561437a57600080fd5b813567ffffffffffffffff8082111561439257600080fd5b818401915084601f8301126143a657600080fd5b8135818111156143b8576143b8614352565b604051601f8201601f19908116603f011681019083821181831017156143e0576143e0614352565b816040528281528760208487010111156143f957600080fd5b826020860160208301376000928101602001929092525095945050505050565b805160208083015191908110156134055760001960209190910360031b1b16919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019820361447c5761447c614453565b5060010190565b60005b8381101561449e578181015183820152602001614486565b50506000910152565b600081518084526144bf816020860160208601614483565b601f01601f19169290920160200192915050565b8381526060602082015260006144ec60608301856144a7565b90507fffffffff0000000000000000000000000000000000000000000000000000000083166040830152949350505050565b634e487b7160e01b600052602160045260246000fd5b600082825180855260208086019550808260051b84010181860160005b8481101561457f57601f1986840301895261456d8383516144a7565b98840198925090830190600101614551565b5090979650505050505050565b86815285602082015284604082015283606082015260c0608082015260006145b760c0830185614534565b82810360a08401526145c98185614534565b9998505050505050505050565b8181038181111561022757610227614453565b808202811582820484141761022757610227614453565b7fffff00000000000000000000000000000000000000000000000000000000000084168152826020820152606060408201526000613b2860608301846144a7565b8281526040602082015260006137f760408301846144a7565b602081526000613af46020830184614534565b8082018082111561022757610227614453565b600081518084526020808501945080840160005b838110156146b057815187529582019590820190600101614694565b509495945050505050565b6060815260006146ce6060830186614680565b65ffffffffffff8516602084015282810360408401526126b281856144a7565b8481526080602082015260006147076080830186614680565b65ffffffffffff85166040840152828103606084015261472781856144a7565b979650505050505050565b60008251614744818460208701614483565b9190910192915050565b82815260006020808301845182860160005b8281101561477c57815184529284019290840190600101614760565b5091979650505050505050565b6000845161479b818460208901614483565b60609490941b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001691909301908152601481019190915260340192915050565b600083516147ed818460208801614483565b835190830190614801818360208801614483565b01949350505050565b60808152600061481d6080830187614680565b828103602084015261482f81876144a7565b9050846040840152828103606084015261472781856144a7565b86815260c06020820152600061486260c0830188614680565b828103604084015261487481886144a7565b9050856060840152828103608084015261488e81866144a7565b9150508260a0830152979650505050505050565b6060815260006148b560608301866144a7565b60208301949094525060400152919050565b634e487b7160e01b600052601260045260246000fdfe756e726567697374657253746f7265486f6f6b28627974657333322c616464726573732972656769737465725461626c6528627974657333322c627974657333322c627974657333322c627974657333322c737472696e675b5d2c737472696e675b5d29726567697374657244656c65676174696f6e28616464726573732c627974657333322c627974657329726567697374657246756e6374696f6e53656c6563746f7228627974657333322c737472696e6729726567697374657253797374656d28627974657333322c616464726573732c626f6f6c297472616e7366657242616c616e6365546f4164647265737328627974657333322c616464726573732c75696e7432353629726567697374657253746f7265486f6f6b28627974657333322c616464726573732c75696e7438297265676973746572526f6f7446756e6374696f6e53656c6563746f7228627974657333322c737472696e672c62797465733429626174636843616c6c46726f6d2828616464726573732c627974657333322c6279746573295b5d29756e726567697374657253797374656d486f6f6b28627974657333322c616464726573732972656769737465724e616d65737061636544656c65676174696f6e28627974657333322c627974657333322c6279746573297472616e7366657242616c616e6365546f4e616d65737061636528627974657333322c627974657333322c75696e7432353629726567697374657253797374656d486f6f6b28627974657333322c616464726573732c75696e7438297472616e736665724f776e65727368697028627974657333322c6164647265737329a164736f6c6343000815000aa164736f6c6343000815000a","sourceMap":"1671:1949:198:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3497:121;;;:::i;:::-;;1999:117;;;:::i;2170:134:107:-;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3251:242:198;;;:::i;2939:133:107:-;;;:::i;2640:141::-;;;:::i;2456:178::-;;;:::i;:::-;;;;;;;:::i;2310:140::-;;;:::i;:::-;;;;;;;:::i;2787:146::-;;;:::i;1875:141::-;;;:::i;1819:584:101:-;;;:::i;:::-;;;4024:14:203;;4017:22;3999:41;;3987:2;3972:18;1819:584:101;3859:187:203;3140:107:198;;;:::i;2022:142:107:-;;;:::i;2902:234:198:-;;;:::i;1572:26:101:-;;;;;;;;;3497:121:198;3545:18;:16;:18::i;:::-;3579:6;;:18;;;;;;;;3570:43;;-1:-1:-1;;;;;3579:6:198;;:16;;:18;;;;;;;;;;;;;;:6;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3607:4;3570:8;:43::i;:::-;3497:121::o;1999:117::-;2056:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2029:5:198;:40;;;;-1:-1:-1;;;;;2029:40:198;;;;;;;;;2075:16;2092:18;:16;:18::i;:::-;2075:36;;;;;;;;;;-1:-1:-1;;;;;4650:55:203;;;2075:36:198;;;4632:74:203;4605:18;;2075:36:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1999:117::o;2170:134:107:-;2217:33;2281:16;2262:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2262:35:107;;;;;;;;;;;;;;;;;;;;;;;2170:134;:::o;3251:242:198:-;3296:18;:16;:18::i;:::-;3321:37;;;;;3335:4;3321:37;;;4924:41:203;;;4981:18;;;4974:50;;;5040:18;;;5033:50;;;5099:18;;;5092:50;3321:13:198;;;;4896:19:203;;3321:37:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3369:20;;;;;5355:2:203;5337:21;;;5394:2;5374:18;;;5367:30;5433:13;5428:2;5413:18;;5406:41;5479:2;5464:18;;5153:335;3369:20:198;;;;;;;;3418:6;;:33;;;;;5355:2:203;3418:33:198;;;5337:21:203;5394:2;5374:18;;;5367:30;5433:13;5413:18;;;5406:41;3395:20:198;;-1:-1:-1;;;;;3418:6:198;;:18;;5464::203;;3418:33:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3418:33:198;;;;;;;;;;;;:::i;:::-;3395:56;;3457:31;3466:6;3457:31;;;;;;;;;;;;;;;;;:8;:31::i;:::-;3290:203;3251:242::o;2939:133:107:-;2985:33;3049:16;3030:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3030:35:107;;;;;;;;;;;;;;;;;;;;;;2939:133;:::o;2640:141::-;2688:35;2756:18;2735:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2735:39:107;;;;;;;;;;;;;;;;;;;;;;2640:141;:::o;2456:178::-;2512:48;2601:26;2572:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2572:55:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2456:178;:::o;2310:140::-;2358:34;2425:18;2404:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2787:146;2835:40;2908:18;2887:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2887:39:107;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1875:141;1924:34;1991:18;1970:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1819:584:101;1853:4;1873:7;;;;;;;1869:528;;;-1:-1:-1;1903:7:101;;;;;;;;1819:584::o;1869:528::-;1941:17;2997:42;2985:55;3066:16;1980:374;;2196:43;;;1671:64;2196:43;;;7441:74:203;;;2221:17:101;7531:18:203;;;7524:34;2196:43:101;;;;;;;;;7414:18:203;;;2196:43:101;;;-1:-1:-1;;1671:64:101;;2086:175;;2135:34;;2086:175;;;:::i;:::-;;;;-1:-1:-1;;2086:175:101;;;;;;;;;;2047:232;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2020:259;;;2323:7;2312:27;;;;;;;;;;;;:::i;:::-;2297:42;;2002:352;1980:374;2374:12;1819:584;-1:-1:-1;1819:584:101:o;3140:107:198:-;3178:14;:12;:14::i;2022:142:107:-;2071:35;2139:18;2118:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2118:39:107;;;;;;;;;;;;;;;;;;;;;;2022:142;:::o;2902:234:198:-;2943:14;:12;:14::i;2514:384::-;2557:5;;2581:18;;-1:-1:-1;;;;;2557:5:198;;;;:23;;2581:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2601:12:198;;;2611:1;2601:12;;;;;;;;;2557:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2650:5:198;;2674:8;;-1:-1:-1;;;;;2650:5:198;;;;-1:-1:-1;2650:23:198;;-1:-1:-1;2674:25:198;;539:36:59;2781:46;816:18:94;2780:74:59;;2669:191;2674:25:198;2650:50;;;;;;;;;;;;;9121:25:203;;9109:2;9094:18;;8944:208;2650:50:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2706:23;2732:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2760:5:198;;2781:8;;2760:44;;;;;;;;9411:25:203;;;;-1:-1:-1;;;;;9472:55:203;;;9452:18;;;9445:83;2760:5:198;9544:18:203;;;9537:50;2706:48:198;;-1:-1:-1;2760:5:198;;;:20;;9384:18:203;;2760:44:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2876:5:198;;2883:8;;2863:29;;-1:-1:-1;;;;;;2876:5:198;;;;-1:-1:-1;2863:12:198;:29::i;:::-;2837:6;:56;;;;-1:-1:-1;;;;;2837:56:198;;;;;;;;;;-1:-1:-1;2514:384:198:o;3622:277:101:-;3690:1;-1:-1:-1;;;;;3685:6:101;:1;-1:-1:-1;;;;;3685:6:101;;3681:212;;3712:44;;;;;9800:2:203;9782:21;;;9839:2;9819:18;;;9812:30;9878:34;9873:2;9858:18;;9851:62;9949:7;9944:2;9929:18;;9922:35;9989:3;9974:19;;9598:401;3712:44:101;;;;;;;;3775:34;3807:1;3775:34;;;;;;:::i;:::-;;;;;;;;3828;3860:1;3828:34;;;;;;:::i;:::-;;;;;;;;3876:6;:4;:6::i;:::-;3622:277;;:::o;514:223:100:-;551:10;600:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;636:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;671:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;700:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;578:156;;;;;:::i;:::-;-1:-1:-1;;;;;11566:15:203;;;11548:34;;11618:15;;;11613:2;11598:18;;11591:43;11670:15;;;11665:2;11650:18;;11643:43;11722:15;;;11717:2;11702:18;;11695:43;11474:3;11459:19;578:156:100;;;;;;;;;;;;;;;;;;;;;;;567:167;;514:223;:::o;17902:344:101:-;18038:1;18021:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;18011:30;;;;;;18004:1;17987:19;;;;;;;;:::i;:::-;;;;;;;;;;;;;17977:30;;;;;;:64;17973:267;;18062:43;;;;;12245:2:203;12227:21;;;12284:2;12264:18;;;12257:30;12323:34;12318:2;12303:18;;12296:62;12394:6;12389:2;12374:18;;12367:34;12433:3;12418:19;;12043:400;18062:43:101;;;;;;;;18124:33;18155:1;18124:33;;;;;;:::i;:::-;;;;;;;;18176;18207:1;18176:33;;;;;;:::i;2120:390:198:-;2159:5;;2179:18;;-1:-1:-1;;;;;2159:5:198;;;;:19;;2179:18;;;:::i;799:322:174:-;790:64:173;;;807:15;790:64;;;13521:92:203;455:17:173;13629:11:203;;;13622:100;835:18:173;13738:12:203;;;13731:101;869:14:174;;-1:-1:-1;;;;;914:10:174;;;;;13848:12:203;790:64:173;;;;;;;;;;;;782:73;;;:::i;:::-;941:60:174;;;;;9121:25:203;;;9094:18;;941:60:174;;;-1:-1:-1;;941:60:174;;;;;;;;;;;;;;;;;;;;914:88;;941:60;914:88;;;;;;;;;941:60;914:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;914:88:174;;;;;;;;;;;;:::i;:::-;898:123;;;;;;;;;;;;:::i;:::-;889:132;-1:-1:-1;;;;;;1025:33:174;;;816:18:94;539:36:59;2781:46;;2780:74;653:67:173;;;670:15;653:67;;;13521:92:203;455:17:173;13629:11:203;;;13622:100;698:21:173;13738:12:203;;;13731:101;13848:12;653:67:173;;;;;;;;;;;;645:76;;;:::i;:::-;1105:12:174;;;1115:1;1105:12;;;;;;;;;1025:93;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;799:322;;;;:::o;2409:432:101:-;2997:42;2985:55;3066:16;2452:359;;2652:67;;;1671:64;2652:67;;;15914:74:203;;;2677:17:101;16004:18:203;;;15997:34;;;;2712:4:101;16047:18:203;;;16040:34;2489:11:101;;1671:64;2586:43;;15887:18:203;;2652:67:101;;;-1:-1:-1;;2652:67:101;;;;;;;;;;2541:196;;;2652:67;2541:196;;:::i;:::-;;;;-1:-1:-1;;2541:196:101;;;;;;;;;;2506:245;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;2452:359:101;2820:7;:14;;;;;;;;2409:432::o;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;:::o;14:681:203:-;185:2;237:21;;;307:13;;210:18;;;329:22;;;156:4;;185:2;408:15;;;;382:2;367:18;;;156:4;451:218;465:6;462:1;459:13;451:218;;;530:13;;-1:-1:-1;;;;;526:62:203;514:75;;644:15;;;;609:12;;;;487:1;480:9;451:218;;;-1:-1:-1;686:3:203;;14:681;-1:-1:-1;;;;;;14:681:203:o;700:1697::-;904:4;933:2;973;962:9;958:18;1003:2;992:9;985:21;1026:6;1061;1055:13;1092:6;1084;1077:22;1118:2;1108:12;;1151:2;1140:9;1136:18;1129:25;;1213:2;1203:6;1200:1;1196:14;1185:9;1181:30;1177:39;1251:2;1243:6;1239:15;1272:1;1293;1303:1065;1319:6;1314:3;1311:15;1303:1065;;;1388:22;;;-1:-1:-1;;1384:95:203;1372:108;;1503:13;;1590:9;;-1:-1:-1;;;;;1586:58:203;1571:74;;1684:11;;1678:18;1716:15;;;1709:27;;;1797:19;;1543:15;;;1829:24;;;1919:21;;;;1964:1;;1887:2;1875:15;;;1978:282;1994:8;1989:3;1986:17;1978:282;;;2075:15;;2092:66;2071:88;2057:103;;2229:17;;;;2022:1;2013:11;;;;;2186:14;;;;1978:282;;;-1:-1:-1;2346:12:203;;;;2283:5;-1:-1:-1;;;2311:15:203;;;;1345:1;1336:11;1303:1065;;;-1:-1:-1;2385:6:203;;700:1697;-1:-1:-1;;;;;;;;;700:1697:203:o;2402:250::-;2487:1;2497:113;2511:6;2508:1;2505:13;2497:113;;;2587:11;;;2581:18;2568:11;;;2561:39;2533:2;2526:10;2497:113;;;-1:-1:-1;;2644:1:203;2626:16;;2619:27;2402:250::o;2657:330::-;2699:3;2737:5;2731:12;2764:6;2759:3;2752:19;2780:76;2849:6;2842:4;2837:3;2833:14;2826:4;2819:5;2815:16;2780:76;:::i;:::-;2901:2;2889:15;-1:-1:-1;;2885:88:203;2876:98;;;;2976:4;2872:109;;2657:330;-1:-1:-1;;2657:330:203:o;2992:862::-;3154:4;3183:2;3223;3212:9;3208:18;3253:2;3242:9;3235:21;3276:6;3311;3305:13;3342:6;3334;3327:22;3380:2;3369:9;3365:18;3358:25;;3442:2;3432:6;3429:1;3425:14;3414:9;3410:30;3406:39;3392:53;;3480:2;3472:6;3468:15;3501:1;3511:314;3525:6;3522:1;3519:13;3511:314;;;-1:-1:-1;;3602:9:203;3594:6;3590:22;3586:95;3581:3;3574:108;3705:40;3738:6;3729;3723:13;3705:40;:::i;:::-;3695:50;-1:-1:-1;3803:12:203;;;;3768:15;;;;3547:1;3540:9;3511:314;;;-1:-1:-1;3842:6:203;;2992:862;-1:-1:-1;;;;;;;2992:862:203:o;4051:154::-;-1:-1:-1;;;;;4130:5:203;4126:54;4119:5;4116:65;4106:93;;4195:1;4192;4185:12;4210:251;4280:6;4333:2;4321:9;4312:7;4308:23;4304:32;4301:52;;;4349:1;4346;4339:12;4301:52;4381:9;4375:16;4400:31;4425:5;4400:31;:::i;:::-;4450:5;4210:251;-1:-1:-1;;;4210:251:203:o;5493:184::-;5545:77;5542:1;5535:88;5642:4;5639:1;5632:15;5666:4;5663:1;5656:15;5682:674;5758:5;5788:18;5829:2;5821:6;5818:14;5815:40;;;5835:18;;:::i;:::-;5969:2;5963:9;6035:2;6023:15;;-1:-1:-1;;6019:24:203;;;6045:2;6015:33;6011:42;5999:55;;;6069:18;;;6089:22;;;6066:46;6063:72;;;6115:18;;:::i;:::-;6155:10;6151:2;6144:22;6184:6;6175:15;;6214:6;6206;6199:22;6254:3;6245:6;6240:3;6236:16;6233:25;6230:45;;;6271:1;6268;6261:12;6230:45;6284:66;6343:6;6336:4;6328:6;6324:17;6319:3;6284:66;:::i;:::-;;;;5682:674;;;;;:::o;6361:459::-;6441:6;6494:2;6482:9;6473:7;6469:23;6465:32;6462:52;;;6510:1;6507;6500:12;6462:52;6543:9;6537:16;6576:18;6568:6;6565:30;6562:50;;;6608:1;6605;6598:12;6562:50;6631:22;;6684:4;6676:13;;6672:27;-1:-1:-1;6662:55:203;;6713:1;6710;6703:12;6662:55;6736:78;6806:7;6801:2;6795:9;6790:2;6786;6782:11;6736:78;:::i;:::-;6726:88;6361:459;-1:-1:-1;;;;6361:459:203:o;6825:437::-;6904:1;6900:12;;;;6947;;;6968:61;;7022:4;7014:6;7010:17;7000:27;;6968:61;7075:2;7067:6;7064:14;7044:18;7041:38;7038:218;;7112:77;7109:1;7102:88;7213:4;7210:1;7203:15;7241:4;7238:1;7231:15;7038:218;;6825:437;;;:::o;7569:430::-;7766:66;7758:6;7754:79;7749:3;7742:92;7724:3;7863:6;7857:13;7879:74;7946:6;7942:1;7937:3;7933:11;7926:4;7918:6;7914:17;7879:74;:::i;:::-;7973:16;;;;7991:1;7969:24;;7569:430;-1:-1:-1;;;7569:430:203:o;8004:287::-;8133:3;8171:6;8165:13;8187:66;8246:6;8241:3;8234:4;8226:6;8222:17;8187:66;:::i;:::-;8269:16;;;;;8004:287;-1:-1:-1;;8004:287:203:o;8296:277::-;8363:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:52;;;8432:1;8429;8422:12;8384:52;8464:9;8458:16;8517:5;8510:13;8503:21;8496:5;8493:32;8483:60;;8539:1;8536;8529:12;8578:361;-1:-1:-1;;;;;8780:6:203;8776:55;8765:9;8758:74;8868:2;8863;8852:9;8848:18;8841:30;8739:4;8888:45;8929:2;8918:9;8914:18;8906:6;8888:45;:::i;10168:397::-;10398:2;10387:9;10380:21;10361:4;10418:49;10463:2;10452:9;10448:18;10081:2;10069:15;;10116:12;10109:4;10100:14;;10093:36;10154:2;10145:12;;10004:159;10418:49;10410:57;;-1:-1:-1;;;;;10507:6:203;10503:55;10498:2;10487:9;10483:18;10476:83;10168:397;;;;:::o;10734:::-;10964:2;10953:9;10946:21;10927:4;10984:49;11029:2;11018:9;11014:18;10647:2;10635:15;;10682:12;10675:4;10666:14;;10659:36;10720:2;10711:12;;10570:159;12448:440;12698:2;12687:9;12680:21;12661:4;12724:49;12769:2;12758:9;12754:18;10081:2;10069:15;;10116:12;10109:4;10100:14;;10093:36;10154:2;10145:12;;10004:159;12724:49;12821:9;12813:6;12809:22;12804:2;12793:9;12789:18;12782:50;12849:33;12875:6;12867;12849:33;:::i;12893:440::-;13143:2;13132:9;13125:21;13106:4;13169:49;13214:2;13203:9;13199:18;10647:2;10635:15;;10682:12;10675:4;10666:14;;10659:36;10720:2;10711:12;;10570:159;13871:357;13989:12;;14036:4;14025:16;;;14019:23;;13989:12;14054:16;;14051:171;;;14144:66;14128:4;14124:17;;;;14121:1;14117:25;14113:98;14102:110;;13871:357;-1:-1:-1;13871:357:203:o;14233:320::-;14439:6;14428:9;14421:25;14482:2;14477;14466:9;14462:18;14455:30;14402:4;14502:45;14543:2;14532:9;14528:18;14520:6;14502:45;:::i;15285:422::-;15550:6;15539:9;15532:25;15593:6;15588:2;15577:9;15573:18;15566:34;15636:2;15631;15620:9;15616:18;15609:30;15513:4;15656:45;15697:2;15686:9;15682:18;15674:6;15656:45;:::i;:::-;15648:53;15285:422;-1:-1:-1;;;;;15285:422:203:o","linkReferences":{}},"methodIdentifiers":{"IS_TEST()":"fa7626d4","excludeArtifacts()":"b5508aa9","excludeContracts()":"e20c9f71","excludeSenders()":"1ed7831c","failed()":"ba414fa6","setUp()":"0a9254e4","targetArtifactSelectors()":"66d9a9a0","targetArtifacts()":"85226c81","targetContracts()":"3f7286f4","targetSelectors()":"916a17c6","targetSenders()":"3e5e3c23","testEmitOnPuppet()":"f60736ce","testEmitOnRootPuppet()":"3ae50144","testMsgSender()":"d81bebb9","testMsgSenderRootPuppet()":"06e28a34"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"msg\",\"type\":\"string\"}],\"name\":\"Hello\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"struct StdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testEmitOnPuppet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testEmitOnRootPuppet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testMsgSender\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testMsgSenderRootPuppet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"test/PuppetModule.t.sol\":\"PuppetModuleTest\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":3000},\"remappings\":[\":@latticexyz/=node_modules/@latticexyz/\",\":ds-test/=node_modules/ds-test/src/\",\":forge-std/=node_modules/forge-std/src/\"]},\"sources\":{\"node_modules/@latticexyz/gas-report/src/GasReporter.sol\":{\"keccak256\":\"0xf0b03a19a92cd2e9950c25b6d307e5aeca4a64be8932194431197d0570e9bf3b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef2a14f0fb6e5bcab0c70d3648d247c3919c63eabc8b226be4d1f359d8af860f\",\"dweb:/ipfs/QmXi1HgeUNmS9GwSFMDJa8QVT7KiENG9VjgBB78hpHrHV6\"]},\"node_modules/@latticexyz/schema-type/src/solidity/SchemaType.sol\":{\"keccak256\":\"0x770eff7a38b9b7b1613dc11ca09db4f28b42a117c9b39b2a06a650a58a250bdb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://39f544110658a53def52c2a4e33b8b158b95a4f14fccea58d5268b6e728d86d4\",\"dweb:/ipfs/QmTesj6tjSFbfAiKUitXapdNYWPStS8bLkB3r22qfyHwUC\"]},\"node_modules/@latticexyz/store/src/Bytes.sol\":{\"keccak256\":\"0xe0bc789337c31551a3ad42fd63aba2489a3aa8567d9f3140b3abc9abdc0d2f1b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6d5313aaa217e563083d9e4ded9479d673b17ba71a189b6a0315839812a5c57a\",\"dweb:/ipfs/QmQJfHFMSPrS6p6q3rzKX6HDNCVsQQAWxGdd383FSfKChd\"]},\"node_modules/@latticexyz/store/src/FieldLayout.sol\":{\"keccak256\":\"0x7335db1982f43f867f90c3e151e3cc6d6ad40ee76401e2e06b8fdff257d6526f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a49d381ef0a0defc90f41166bc7f45cf31e8d82d1517e6a323a90e79b4e45d1f\",\"dweb:/ipfs/QmP46aGM8cYPkn6C4rGnrumcg24g7aUzCAez41zPs2rqhx\"]},\"node_modules/@latticexyz/store/src/Hook.sol\":{\"keccak256\":\"0xbe6448092b2d0c77a7cb282e8a452732587a6e04802ad21f4da27a9d6ef1496a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1d098409f9352637599b897d046ad23e20894ea3a8460687df2a13d2d960966d\",\"dweb:/ipfs/Qmd3w6dSq3kQVQQtH94wcKRzkaNEDWcE2m9bgbWWDqNE3w\"]},\"node_modules/@latticexyz/store/src/IERC165.sol\":{\"keccak256\":\"0x2bbc3c43400c15a91a5cb35430a91309cb64a4d13a0a170eacec71dcf334feaf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f44dfc9605067de539de07a76a34bf469faa9e6dad8c192abafc2e05860c7dd2\",\"dweb:/ipfs/QmX8xgG6XWokM7YFwFZvmMhuh1uhkSjxCMD2oTHjUVdapb\"]},\"node_modules/@latticexyz/store/src/IStore.sol\":{\"keccak256\":\"0x9092b65551d0f910e5645cebb5acadb387cdd192d75fa89cd6b293bd65b28827\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://478825a6f7eff9ddab968e71e1d55ebee279d3b318f10976d9334384000059c0\",\"dweb:/ipfs/Qme7NY976woRy3RQjE4tkkiwoXnoVtTmER3PbWCSbjZ2kb\"]},\"node_modules/@latticexyz/store/src/IStoreData.sol\":{\"keccak256\":\"0xa8eade05c551aeef35c84727d7a44af239516deb2d8a0cfb7ebeb5d88c6995e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5335910bd8a204abb5f4396fb911a5ee5c221bd7fa63b1cc8ae5e737c6458c6a\",\"dweb:/ipfs/QmckkCAfrNcWo3yDxoD1jCe1k4iDA2GzVDpFjJZs7W79vx\"]},\"node_modules/@latticexyz/store/src/IStoreErrors.sol\":{\"keccak256\":\"0xb9070663ded3cad82285bb7610949e422f88abb48c2ddbd792af83d127d64212\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://830490f1c888bec86df1e7ef43773d60ebdbdfdb2b91ab7fe074e2f38d7439dc\",\"dweb:/ipfs/QmS26fpXdZuGgMmjcdQDf9k1Bedn2dhjk9byFZJoNkctPZ\"]},\"node_modules/@latticexyz/store/src/IStoreEvents.sol\":{\"keccak256\":\"0xdd3104680808f975462a85cbd4fa87783ba5395797419caeeca37e8f8627a16f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://943864b7eb16ad2047ade5a8598e85c8a4b46d1aed6aef02bfb7cee8de732b4d\",\"dweb:/ipfs/QmTEij4caToSNk15PFpubXYDy9QhwmPyP9tMXjUse2cTdv\"]},\"node_modules/@latticexyz/store/src/IStoreHook.sol\":{\"keccak256\":\"0x9c3ba4c889db2cc2155ddfc966f5df45cf73739cacc358e0ed71ee9d34d9cef9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bc8e8abc3d5ce2af06c3a9f37ebe69cb287514c4572327b09d26121133646e5\",\"dweb:/ipfs/QmY7BmHTiGAJabiLZXLx2zsRs9HfZzK97kwmnwfCidcHZ5\"]},\"node_modules/@latticexyz/store/src/IStoreRead.sol\":{\"keccak256\":\"0xd2180d53ecd31069b1166f170ecdcd85917ac50f45fc26fb39b49cee7ba00e37\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1494bb0a3228e2d194bddaed4761fd3ca865979f0e3f3a53acd271143a4aa0ac\",\"dweb:/ipfs/Qmaddnzzmu99iP9dTWK9ZeByh5dZyjY9SpVnRdvyr2fBAo\"]},\"node_modules/@latticexyz/store/src/IStoreRegistration.sol\":{\"keccak256\":\"0xf448fbb2bc9c982721a43234463656da5a49cea08543e62148d54f11e1ac3e2f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://64b3579d9b9dcd73dca2beab3d4fcf60237420945ebbb2e9f4ffcc88f4110115\",\"dweb:/ipfs/QmaW5nN3zGEriSYHncye6Nz2TkAw1oo1CyG2JuJTJrJoXg\"]},\"node_modules/@latticexyz/store/src/IStoreWrite.sol\":{\"keccak256\":\"0x8b6c7af5ee330928aebb58c8872d3944304ee10ed11f8a325b6accc4ec5df81b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b866d158701c7a40834bed735194b804ef219f2bbe574e2307785fff7bcf9da1\",\"dweb:/ipfs/QmXzJfZkXVfyr2RFGwDuazeVnV3UWYmQxjKZ3KzFbbe75U\"]},\"node_modules/@latticexyz/store/src/Memory.sol\":{\"keccak256\":\"0x69295976e61a1a108d1b4d6eb497b238730309f3047c4320d48e01a0ce8d4ec7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://559c451b21fb9dd4fec27b41bef42f4362f1e7ebb7992106d548b9d4f733b3e5\",\"dweb:/ipfs/QmeSE7YTW5zUrfZYFVb2pFnDe3XxiT8XNecfwC3wfpxCRv\"]},\"node_modules/@latticexyz/store/src/PackedCounter.sol\":{\"keccak256\":\"0xf2ac4fe9b94aba49819b8bfd9952a73e21bd30aa956aa3a0ba4333d0e4891e91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c41b0bb60c662aab1287d0ec92cdd7ce07e6a732ed8d5e6045e14c7ba49d4ce8\",\"dweb:/ipfs/QmYMHVsvJpDrpFW24uHmJFjA8tbr7WjyP4KAFnroApP7Br\"]},\"node_modules/@latticexyz/store/src/ResourceId.sol\":{\"keccak256\":\"0xd886462cb60be5929d17bed2740225effa8149ef6358378e9e1f385d58673be9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f66f49397097f9445159417fb61bd362de7849b1e572a3a9b5cb0536636a3d9\",\"dweb:/ipfs/QmPYEREcaUyoqykx4hjJG4k3P9HYmAM4gAxvGsJT6yWqvn\"]},\"node_modules/@latticexyz/store/src/Schema.sol\":{\"keccak256\":\"0x58aef318ba03f8ff8866ef70f8a30f549b150657ea699734aefe16c298956401\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7dc104690a7e2bcf5ce1afadcd58f8ef4d639b4b92b9ad9293656235d54395f3\",\"dweb:/ipfs/QmYJJvEv5KBJ3kzf9AkgRn7Uu5dp4exGTRddf4cae1btgE\"]},\"node_modules/@latticexyz/store/src/Slice.sol\":{\"keccak256\":\"0x08f813a47c9b17e647c4051b310fb7b04e2af87c5440f4c916e4e6b5bfb29710\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0a7966452656a25e3555e39f10121a69690b0ecf23524c073f61f9ea31a922f3\",\"dweb:/ipfs/QmQiEsLYyZFBZbcAbzwSK2dKxpj7xbs7CPLt3py3uGZSSN\"]},\"node_modules/@latticexyz/store/src/Storage.sol\":{\"keccak256\":\"0x5a32d464b56d13b9cf93f15c366e1ba8c4e2242bbad3990829c7f674e49ac2f7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://adf1460050534fbdf4b2615c9dee03aed9d84bc0198cb082b10e579ab01d568e\",\"dweb:/ipfs/Qma2zugjeP748bkmbYhqVrzrKcdn18KLH3TZMfVuhHq2M4\"]},\"node_modules/@latticexyz/store/src/StoreCore.sol\":{\"keccak256\":\"0x6f21b3b6e6c202a1f9a5ba3ce7a656d38b51e1f1755a7ba3d1bc4c083a94aa94\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e5499fa030ff8dee5db70851dc678a9f0eb7c2a548f27fd5a3ecd0b44038642a\",\"dweb:/ipfs/Qme3ZGKP1YYMt98rFJ8uRRZ2jgWaqNdKAS9HaEP4HYPrB6\"]},\"node_modules/@latticexyz/store/src/StoreData.sol\":{\"keccak256\":\"0x4e451128c33a01d520c1944b3db42a62c158aea8fa11e786a58a0f719a189526\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2f98f30a7b2c9ef020e274b87ae0fa66d1380343a00ecf6bd796ae31cd9b279\",\"dweb:/ipfs/QmYXHSBn4Hp7cimDLKy86ep23v2VRUS6dLPevcVMs3dJrw\"]},\"node_modules/@latticexyz/store/src/StoreRead.sol\":{\"keccak256\":\"0xd918972009bd009dbad7032b8ff076928cec18c0891bb12493a1799df83e9cfa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://966bb2090623b9a6aae0e5df9ae4c9c21bbde97867a239303c934c765eebf738\",\"dweb:/ipfs/QmRui6vJ8UfNHAueDyRuSXfW7wwuxRxAHgGjB7wVJEB6cJ\"]},\"node_modules/@latticexyz/store/src/StoreSwitch.sol\":{\"keccak256\":\"0xf132af10f960a498f49c0534027056e715f4bdcb8fbdb53ac6879c92309ab416\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e85a09aeb7543bcd9d74b7ad319ae61e1f7f15a6a0ad9e79aff750fbd18111c7\",\"dweb:/ipfs/QmY6xgqeeaR1FsCPLmFbVgjm1D2UyrXNABKXWLfFaSmBhR\"]},\"node_modules/@latticexyz/store/src/codegen/index.sol\":{\"keccak256\":\"0xf337a5abb2d43ef00c1c200e7fbec30fc89c7c701e457ab4277194b700d2aea3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://eccdf6158076b4e8f1b587a0310228f53323705e054a44eaa7733f38805c3ee6\",\"dweb:/ipfs/QmbXEVNTctg54dK9awdCVyAjeuUjR6ckfmmXBP8DrFmjyq\"]},\"node_modules/@latticexyz/store/src/codegen/tables/Hooks.sol\":{\"keccak256\":\"0x6ba24d7c79f616a40a5a28466a113c3b491196ed43a236124ae9f52f940ebae6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c055a11a1a52d820e5f71c1434b94b2083304d94655d7dbcefb7c7b4e42a095f\",\"dweb:/ipfs/QmUU119ZHn9S3ExK8ZhNyHbdxWMu3RasLDZco9vR9KDQJw\"]},\"node_modules/@latticexyz/store/src/codegen/tables/ResourceIds.sol\":{\"keccak256\":\"0x0d5cb177f2e3f968b5d8962727ee95f6ec12f2f02635bd3388e8ba658a513782\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c1f989b97f782ba8a7b7aa85c79564a4eeca21e8c0c255d287d5a2fb42700e9\",\"dweb:/ipfs/QmXVeQ9p6b8GRMYE8QWPR89xRsMWRQsxPMgQHsUvMWbLeb\"]},\"node_modules/@latticexyz/store/src/codegen/tables/StoreHooks.sol\":{\"keccak256\":\"0x92e5306a8572903c6ed2ede4713de8356221511aaa9043a115010d8dc504d95d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c36a58e47472e86c8b995c33eef1be95c7073d30e8e4b59b4c65413cbe34f695\",\"dweb:/ipfs/QmaHP8apm4XnMSQkMT4Wysu8LxVSnH5JcPne5PV8YPyJNv\"]},\"node_modules/@latticexyz/store/src/codegen/tables/Tables.sol\":{\"keccak256\":\"0xc1ce9530a25c9e1ebc6a4d1789f26b9607f09b38132a64ced9cfcf34e3011e91\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d67414de99946c6c199fce2700a2765e279d4fa9c0ff665035193883221979ee\",\"dweb:/ipfs/QmViGZuPahjSGa18UtAjSXbAao9wuMK4m6hxjtX6pDqqU7\"]},\"node_modules/@latticexyz/store/src/constants.sol\":{\"keccak256\":\"0x9e37c64c119ef07ad914bc589ee3f6d67946ab95877978c1ee3e2c1ffae07076\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3fad47e542025382aa28e8171253e34f93b2f149434b67a26989542d70218793\",\"dweb:/ipfs/QmW6JsKNwPc6oAMrgcikgR2EPwMUtQANiuZSQSGCd29HHC\"]},\"node_modules/@latticexyz/store/src/leftMask.sol\":{\"keccak256\":\"0xe050786c52cfb1da012bba86744d2a89f8aa6507342e498c96fbe013b0d6302f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a62d2f8eb85ddc6de911a0b415bbcf666001ecfd15e681f718cb9ae053a3a793\",\"dweb:/ipfs/QmXZHfKXZNQRJMqLpS15kgZgMfMUkoB8FhypDWDaYaqtJG\"]},\"node_modules/@latticexyz/store/src/storeHookTypes.sol\":{\"keccak256\":\"0x60880298016fa117ed9a43ddfd020f11d98a2d345bdcb08e5884e40df98eddd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3619dfda1fd514c0fc5fb34c14d5b5aa41dd6ba6045d37d5f4c8199f3a826f81\",\"dweb:/ipfs/QmbzRBYfVa423gNzCitpGN3i2N9oeGYfinVE1jgtqxnNZX\"]},\"node_modules/@latticexyz/store/src/storeResourceTypes.sol\":{\"keccak256\":\"0xada1867ba72930fc5cf5562dd4e36de849dbac9c833b7969cb1b046a808fabf2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e4b5fdcaa54f567a3f8561c2c3fbc0d68c8dad892a4a8e5418bbce8efc53d84\",\"dweb:/ipfs/QmTWbYJX1yrCqrEwUKB9rGpHdRvLNU8GCkBbxnLjGD4d2t\"]},\"node_modules/@latticexyz/store/src/tightcoder/DecodeSlice.sol\":{\"keccak256\":\"0x1af0fd984640123391ec2df855d00298504b7ce186a56c2caca769cfd9e08e04\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7305a62318890d2cc6420ba7dec13d9f2c1cb67ac689015fc83b9cbccd0696f1\",\"dweb:/ipfs/QmR8jGNLbt64Tv1YZKRVBCVsd71oeUQFzGHHtpsrs4PuRq\"]},\"node_modules/@latticexyz/store/src/tightcoder/EncodeArray.sol\":{\"keccak256\":\"0x1c280d24360282e196d9c4833c58c2437108cea2af0ac7596f95be81389e306d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6b4556b6eeae9328fbd9adcce346547e823c397503276a4d63effb67e00b5b49\",\"dweb:/ipfs/QmUsynVsMYzjh8oJR8YB7SRrwFMdXcsQsHBrXxLEEFxsiB\"]},\"node_modules/@latticexyz/store/src/tightcoder/TightCoder.sol\":{\"keccak256\":\"0xca2e2218bccd60ed690f29152b234a553f3021cad4903c0cfb5cf757fa41d650\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://65f3bf5b851072ba1367ec74b3c66cab6185f3c8c8d6ada007cdc8c513465d25\",\"dweb:/ipfs/QmdHsBNc7ccvTK7VDB9yAktdbRNBrEsUdBNFZTqdq8Vao2\"]},\"node_modules/@latticexyz/store/src/version.sol\":{\"keccak256\":\"0x01029999a48b7c1d85de84cae465dd24ec126c95b8a865cd20c7ed5dfcc0f02c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9750164ce996badb0fd7df2f526780b9cb9558912405fe46f31064bd7c522491\",\"dweb:/ipfs/QmYf8m2ZXFANRc9ysHgNkNtSF327ccxKYjCUJ49UXBKADk\"]},\"node_modules/@latticexyz/world/src/AccessControl.sol\":{\"keccak256\":\"0x963a4fc3983bf92a473e67f49b62b8f52d94360bb904664b24bbff844e6a4a41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2cf0ea9f68a1a9738b116259dc2cb06e98cc591d82b2c271b0e70e8daa742952\",\"dweb:/ipfs/QmRVxuBtGgw49v3KGm3HTBNS5ZJ9wEvENwipJEFEtoiaZ4\"]},\"node_modules/@latticexyz/world/src/Delegation.sol\":{\"keccak256\":\"0x09324c2d43eac847a312e1879de1019d1b6eb333d9c9e0d42c449d76f5d9fc89\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bd6f751c31f1305ffb328b1cd4bcc3999439f63f2b8ad9a33bbebdccdf60e716\",\"dweb:/ipfs/QmRfj5xWwC3wzFr9iAQBr1pAQmLYPJhDRXyRcJpYfhDdoE\"]},\"node_modules/@latticexyz/world/src/DelegationControl.sol\":{\"keccak256\":\"0x1ed755a4addafd3d0fd1b527d46ea9951920496f8104fa836b297b2544d6fed0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a55b1fa9ac9bd53177d529fd9a000d5e4b455a6aec23004c71365d352c6e6fda\",\"dweb:/ipfs/QmWhetkDnCTiyi8C6qZf23misxJfnGWjesStFZV8sdD8oe\"]},\"node_modules/@latticexyz/world/src/ERC165Checker.sol\":{\"keccak256\":\"0x26204bcfddbc272eae391f4512a629f53697867d582ea8cabcd6a8e04a255270\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46944bac8253250ba3f645a6164df8e996738bc76a544867677e54ede57619a1\",\"dweb:/ipfs/QmY1XSxQY9MuQSEvGaeQT6kqmeJ3VhYyRRTfzCkRmdsWsX\"]},\"node_modules/@latticexyz/world/src/IDelegationControl.sol\":{\"keccak256\":\"0xbf3da1c6ab38b3db62a4f4dd0235280d1fb07d8d465a145d6fd9eaf4bb4c3553\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://30205a69d660ed8de5bf34ee73ec9033737d544bc7572130c439b2467606469d\",\"dweb:/ipfs/QmUWTNdSW1bxXjaQzMUCLqBBoLYYre7CgDko4Qy12DaRNS\"]},\"node_modules/@latticexyz/world/src/IERC165.sol\":{\"keccak256\":\"0x7997ebbdee6a2493f28e7032c7a8b906ade40f807d95734e2653c8f1b023ff47\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c8ca41bb2619bf27e5bf886d1322f0e2dffd096c49f7ae6e716541dd1e1ddce5\",\"dweb:/ipfs/Qmb8zATUWWTtiWaSLjbAe6PGnJPes9ANvEyk7pYoWR3P3Y\"]},\"node_modules/@latticexyz/world/src/IModule.sol\":{\"keccak256\":\"0x9ace961d4e283e0974762fddb14bb15e256d1d1086c813957fa0a0c9abeca900\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3ce3e6875d5ae61e12f3a36b8cdd2aa42e137f4d356109f89101fc7ea2d38f35\",\"dweb:/ipfs/QmbCarvuyKZhaEKebPnzwxCrXPGZvZB5AnJxfXgCgex9py\"]},\"node_modules/@latticexyz/world/src/ISystemHook.sol\":{\"keccak256\":\"0x96b32546011ad67c3d03815dfd9375e9f8a255f98aaf89880afa1c8548d372b9\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c58294560e554b8d8c6e3e870768523aa034631d4908ce25e730bb372ce7795c\",\"dweb:/ipfs/QmU9KfaZRNmQdoZE5bNrMN6QJCm7HGfsCBPvBGbMLLq9E5\"]},\"node_modules/@latticexyz/world/src/IWorldContextConsumer.sol\":{\"keccak256\":\"0xc7da95c29b6dc76d21ea866139e4cefeceeec094326811a4e5afafe494d6a881\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3048f85d42046b460ff285e38091a18ff848a489670e278b233669baecc2d6ef\",\"dweb:/ipfs/QmPbeYVnPefPmtpaXXAGAjEGXjducZf9sF8fKqgfENCpwj\"]},\"node_modules/@latticexyz/world/src/IWorldErrors.sol\":{\"keccak256\":\"0xc3e7975e5785574543229eac51e3441f4185863d7f5346c0ae08a27b4541f8a7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62cc0dc109e6e5475bb07fb95643a31c74337c23521db0557a36dad6117a1e83\",\"dweb:/ipfs/Qmb8jbE1XQTUdreKFr4Jw3xmjctaLuReRZjPxZKQ2uW9p4\"]},\"node_modules/@latticexyz/world/src/IWorldKernel.sol\":{\"keccak256\":\"0x9dc133cb55dc23fd6fcbbef8078bb4ea9bf67d698400cf89fc62b905b60cf5eb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c1a57df7052218483eafe72d873660f39a73e2e06c1b14ad8a579d85b94bc6c\",\"dweb:/ipfs/Qme7dnjvADGZyM2L7nZ51nSjsjXXF9isTVCpWaUCd1cEGs\"]},\"node_modules/@latticexyz/world/src/Module.sol\":{\"keccak256\":\"0xd0060c58956a1fe0855bcd9099e8764922f0d3b96f9683bd9622b8da05524f19\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6098c318c6b2606aa0a31554c6dd5923b6c106c24daa2f1119311cd4f4e47bce\",\"dweb:/ipfs/QmZTSSpfmNWakCYvFFZhd7zjmnkNPuSeYKhfCQwZ2gjRWL\"]},\"node_modules/@latticexyz/world/src/System.sol\":{\"keccak256\":\"0x7bece0ec86fdc458054e6db0ac4316fc98882fa3ba76b2fa107d3de5382053cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d154183426723bbf133d4dc5f8d051e9521f7b7cabe63925731fa4af99379cdd\",\"dweb:/ipfs/QmZXxPGcqknGLCwTByaZFKhqvKbrfiZkywmnh8buGTC2Mc\"]},\"node_modules/@latticexyz/world/src/SystemCall.sol\":{\"keccak256\":\"0x2ec34d896ea59d4bd47b99c1c1476c9c8f94f21d8af5f35ceebfeced4dd48ec2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://97dc97678b209c5e69d8b45adb3fe8c8d8b8fffbd725a8deb462c790a6a58a01\",\"dweb:/ipfs/QmbUntQJj9n55PDjXcdJtmsWSPdWzyhbe6UCK9iHJuq3XM\"]},\"node_modules/@latticexyz/world/src/World.sol\":{\"keccak256\":\"0x2fa1e13f367a2110bce824ed5fc8b3d74cf60b0075492a7831dc887fc47de54b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a7afd2c5fddf3d635a25a03aeb34991036ec8a9a59f44ea323f8c1f3f17bbf14\",\"dweb:/ipfs/QmbYiNvJmD8mCjeAY83Jebb54dTcgYd4Knr9jbKnMcDwf6\"]},\"node_modules/@latticexyz/world/src/WorldContext.sol\":{\"keccak256\":\"0xa11d93077d94f18683f1098b69c4713a48001ae15054476135ec9569041abb9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9b1d3384def68b4061c445b55602dd9cbcd4e8c58c13db5e945f284a05c1b518\",\"dweb:/ipfs/Qma5DUZrSKZUxrxiGCpyRPWMJNdHU2wu6qDEsFWEJSnLfN\"]},\"node_modules/@latticexyz/world/src/WorldResourceId.sol\":{\"keccak256\":\"0x7daa706e844ddc2ffa9ff2197139fa73faee614030c5d541e339c219129005ff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://62da4413068810e6fa32ef87b2a83386a0084ec2bb26722515127e5893281cbc\",\"dweb:/ipfs/Qma5SLsHRq3igdXfKz24XSGfMd3dXyNxv52WSTsrcLRWPV\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IAccessManagementSystem.sol\":{\"keccak256\":\"0xc912f14d0f2e2e9e728a9d18e250ebe3eb2f51d0b4d79993c9d997991bbd5593\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29621425847a1c11205307896b04e2a6c97934dd619f23ce6774ce52520f1255\",\"dweb:/ipfs/QmeuTe3q8U11Dqkp5tahxVWnp9Cd5ezQmRZ5vhEHtv14Eu\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IBalanceTransferSystem.sol\":{\"keccak256\":\"0xf04594c29c5c5b3110453ac189a8008735753de864ab4a7dfa97ccd3ae5f4a55\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4a3061f72b969a294dc96c3b2e59277e762ce6571cedcc7e280412431453dde5\",\"dweb:/ipfs/QmWB9aboakrCH9AmzGiZ1mCceh9atF4ks5ndEYFzUVbaHT\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol\":{\"keccak256\":\"0xf103db760a912d42dac0c409feb2d1929864ae81f89a7186047ea6f98b9db2ed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9ee556bbf7f7aa2f221e1f5a9d80caca8d4e5bc9282f59d5611a7c9ea7c06024\",\"dweb:/ipfs/QmQouopBhk5VuzdUSVc9MC3C5nhbm1MgHmQhemf6w66WxE\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IBatchCallSystem.sol\":{\"keccak256\":\"0xb4d323470e22b1d3f0168a44196eb09466f602b7564c75e5739c5f53a5036f97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://acad752208d00b731baaa1cfa192ff3981001fd030953bdc604e4f69ec2cd0b8\",\"dweb:/ipfs/QmRFw3RgmX2CHqg7PqsP3rqVKxBVYNq5hHcFiyA2Y7iAaX\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/ICoreRegistrationSystem.sol\":{\"keccak256\":\"0xb5e41596b245dbb0f4317174ae08c963a55df07cfd1a2e65bd082628bc446350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://007f0e50c7f40d3932c5db51f729148f7d67573ef2f429043d901c7b017d7f43\",\"dweb:/ipfs/QmdmnY9RFyGjhmjSif3wZYHSMhtkTNhxi74dzVzsQBgi2N\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IModuleInstallationSystem.sol\":{\"keccak256\":\"0x5be1d1ee90a7a03258e8c4fce7542453332c637a51b015e0cc29151ef2792263\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://df6d97356b2ca9d97b7593f4c0772742529fea73f1665e55a879a368b399cae0\",\"dweb:/ipfs/QmXCs5X4Z95isKRzjP4TQjQxwiB7773tHiJWLWkjLv3SLj\"]},\"node_modules/@latticexyz/world/src/codegen/interfaces/IWorldRegistrationSystem.sol\":{\"keccak256\":\"0xd7e31957e7fcf056912fe16e10a0411bdb071c14c45853e7da264dfbfd6bcb62\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c4ce02327ac8971177685fc2655733ed3c07f5dfb72846680544a48953180aad\",\"dweb:/ipfs/QmQMNtkeCXdZfyyvtY8vUrKh5RUbpM7HYMGrzbxZGzTEFh\"]},\"node_modules/@latticexyz/world/src/codegen/tables/Balances.sol\":{\"keccak256\":\"0x2fd9727c04a06dacd957c320e5c91844e389df164a02f6c35e169852d974a1f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cfab99486f9011db6590d75947a8510540bc5d6160866cfd1fafe16daa024961\",\"dweb:/ipfs/QmPAyaKJwhawWcyegfHv1QkJYzdAMpySok2gDKVPpw1rvD\"]},\"node_modules/@latticexyz/world/src/codegen/tables/FunctionSelectors.sol\":{\"keccak256\":\"0x8bcbbd417bc83b92c1d40444cf2e617d8a5c7e4d7486dcc3467fef2470338bcb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://aedd3d896ccc900aa9a4f53ec7a9245e5630f51e847a0e2356e12e4492084a8e\",\"dweb:/ipfs/QmRQJwy5XYHGXT973hYdPUR6cG8fSDPi8kPgprYJXUfuVf\"]},\"node_modules/@latticexyz/world/src/codegen/tables/FunctionSignatures.sol\":{\"keccak256\":\"0xed3112d1dfeb8afa9be21cc3bf70f7af31b0443e9579f080e7ac2640664b8426\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://571277bf66022fb97fb43948379b560c6d6904dc0272f91b30d3ab16a5b76c91\",\"dweb:/ipfs/QmNhb9rrrW8KXzLfg3eiUR86hnRhaD2kzN5mAcWuWQ4pu5\"]},\"node_modules/@latticexyz/world/src/codegen/tables/InstalledModules.sol\":{\"keccak256\":\"0x334f30cf5cac3f795cd63f15582a6a50c91c91644000a1a5c3005a4c17b075ac\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://79369df71ea24d4eb6579f9edc5ac3f8c8d4fe2563db7438c957f7cd8fd696d4\",\"dweb:/ipfs/QmZBQv6xBpXWocxy4nX5o8XJYuvi88y69YmHJYUGgGFRN9\"]},\"node_modules/@latticexyz/world/src/codegen/tables/NamespaceDelegationControl.sol\":{\"keccak256\":\"0x760eec42bbfbdb497a80fa704956c82bca38d21ee220a1671ac7fc1364ddc0ed\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://313982b1791750271b460fa94c3ea54eeb2d88b3093ab2cace6014a6c9ee387b\",\"dweb:/ipfs/QmVagcNagZkFZeVieECp53rjZEYBB6LU8HP4BjKzfiC4Qr\"]},\"node_modules/@latticexyz/world/src/codegen/tables/NamespaceOwner.sol\":{\"keccak256\":\"0xb59422d88ec4d7ea5870bfbcd26cce216808aca2524d78be044e6246c2e0c8cd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://690489521124436a18dd3b2efc1c28636488414b82c6dabf743bde1c8f9ab70b\",\"dweb:/ipfs/Qma89LxYq3aBdNZnsiH2qKuq47gmSn9QpeoFe23pahus5Z\"]},\"node_modules/@latticexyz/world/src/codegen/tables/ResourceAccess.sol\":{\"keccak256\":\"0xa6dd49d8d3bc8ce68d45ebc01f087ef83b1d758e9967322fd15cf641331c2527\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a80f0382a7bad47b1b947bc9b447eafb35599b0e11a9bdcb45c7cddb3bc1375a\",\"dweb:/ipfs/QmRBWAsqUya6uxXn5fqJPgnkytDfp8HXixcymwTmYKuoPc\"]},\"node_modules/@latticexyz/world/src/codegen/tables/SystemHooks.sol\":{\"keccak256\":\"0x43cb675401e3e464a93ae0ddaefdb6ac03b734b7226ba89b8727d6421e50e2e8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a37a9d6881779113b1b78b0e9175b64089da881be1176fc764ceaee9fc65436\",\"dweb:/ipfs/QmXgCyyJUAAn99Czgv51nkr6qi9hFduhJpybkn95ipJHJL\"]},\"node_modules/@latticexyz/world/src/codegen/tables/SystemRegistry.sol\":{\"keccak256\":\"0xd0128bfb43b2afdc0c0410b6a642ce7b5ae4e5c90c367e542ea0b3e8d02eba22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://59fd7075792470f625e15e7c7a5d377b6657b26ce22a82c705888c2773840330\",\"dweb:/ipfs/QmdPygA9VW1Zdds4FTejEDSEKzaPWDFvXP1VqsaJB6KF8q\"]},\"node_modules/@latticexyz/world/src/codegen/tables/Systems.sol\":{\"keccak256\":\"0x20ad3ee26ef118cb8b055803c4a5ef2aac4791ce9e8720fc6a549120c53ab37a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://58c1a2e3abb381a36696aeb3588a2604706e88b8505caddbdb696f96249e6231\",\"dweb:/ipfs/QmQvPVUFGBRpbaK9et2L7rVVmCByD1gDhaFvtJNL7cM7d2\"]},\"node_modules/@latticexyz/world/src/codegen/tables/UserDelegationControl.sol\":{\"keccak256\":\"0xa9a5ebaa93ce6fe8b1f2cef5fd1350ea755d2ab0ff7ae2a5c369e493c2d205d5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5ba46cddd36f4a69e120e11edb0cbb8cd8d8363636544fe21e9712e41786f231\",\"dweb:/ipfs/Qmc87CiTYDULyEwTZmbfHcrqx2gNRrkSakYdS6wRXi7LQN\"]},\"node_modules/@latticexyz/world/src/constants.sol\":{\"keccak256\":\"0x07faffa7dc4a2adc4f9bfe93d5a59a7dd89241d360996537608e38f61c2d0588\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b96d4ce331b257a24de2f18503a11b986ed32d218810db9d5e3e7eddc17c2218\",\"dweb:/ipfs/Qme7Cw4RN1eaFWt2j3hk6ZMB7GWUfMY5oyZKYfMvAVxdBc\"]},\"node_modules/@latticexyz/world/src/modules/core/CoreModule.sol\":{\"keccak256\":\"0x1854f68cb404adb13910c7cb5dc91b4db83b33705a92717485df16742acfac43\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1119dea8f6a76977e6327b789fae9023eedd63df9a50b6a7b4c6190f02de10a9\",\"dweb:/ipfs/QmXJ6YthgxX5ybpCgcECBHC2uPnycnC7mzh3KTbF9vZWDz\"]},\"node_modules/@latticexyz/world/src/modules/core/CoreRegistrationSystem.sol\":{\"keccak256\":\"0x4969fab8e65df062b3ee1d5c55c5dc980b4c8d531a90977e5f318500eafe2125\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca575dec2084e8ec0558c6866af383fea4f5111079f06db8c78b1a7dc78417\",\"dweb:/ipfs/QmZCHfyhMQ4Z4sJvW9uzYhuTNTThoRwH8Usqx6q95AbNSb\"]},\"node_modules/@latticexyz/world/src/modules/core/constants.sol\":{\"keccak256\":\"0xbe6408440b758884cfff869ae6c8aefa476ab97b07855dd51571bb358e9ecae0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://854427618d6d700c2dbba45cc475bd341b14612d4dc05af687371dc725e0a11e\",\"dweb:/ipfs/QmXueKPv6WDyAwjwej5XHnBTMQeUYEbtgNryqt4Tnsj3sK\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/AccessManagementSystem.sol\":{\"keccak256\":\"0x29cd0f1a2ec749bc25774682977cad4dd238602a3b4e926cc08bb7781fabf2bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://98d1f0b23e9ed303b543e943abcb5641d0744e2c1ae003df6dea877a070f96e0\",\"dweb:/ipfs/QmfQj5P8Lw6DfMfVnhsAaDCtN6iYfKp8V4uxX5LQQnzxLo\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/BalanceTransferSystem.sol\":{\"keccak256\":\"0x8170eb46e9716b8040b9a95d8740e1e897538afb1da95a1994cba7907522b4fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b19dbd9f3ca1f541883879985589095f851bdd201d9cdde2d6742dda9ad01a2e\",\"dweb:/ipfs/QmTgSMvsVFAEMK72D7myoJtEykDxAMweueJNEagSChyA1Y\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/BatchCallSystem.sol\":{\"keccak256\":\"0xf24b9cc96cccb8ef98c9aa8585e4a5c003b3b8a00c5a9c6db5c750460960a7d1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://afa918bcba66835a0866a11c5b43b5da11d68fb68c697f89a273d5dd3a5f1f5c\",\"dweb:/ipfs/QmZyyVdNoUiyLMimmNkZkQv5o86k4sGyo1CGEMrt794eC2\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/ModuleInstallationSystem.sol\":{\"keccak256\":\"0xc9b0efce92d9be51ff564fa18efc13365a64cde8dd2e2ef88bac4abe7d432a3d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://86d2a49cc96ad7e783490c6e44aa2d078444505edc49d1061711200a607441a6\",\"dweb:/ipfs/QmbKkJnRkUE47uWwmhqqmaVozRXLt45ebSZbZnpJpnJfvj\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/StoreRegistrationSystem.sol\":{\"keccak256\":\"0xf7edf07894b8c6938b77491d36944d22b37b9e9e8105a689120f66e76450d3dc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://55be67cb294109fbb9a323c5f788aa7d1b844f7bc57f5bed6b758d2d80447a24\",\"dweb:/ipfs/QmUv8FwmcV6mP2o7aZiZkRxrnQdnaRLYiFWs8ifaEadKJr\"]},\"node_modules/@latticexyz/world/src/modules/core/implementations/WorldRegistrationSystem.sol\":{\"keccak256\":\"0xbae6190d740add0ee986f82b1143f8f160d232e0f3c2eb4d7908040f07b45427\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://022b092b8757770e5799d22de9b09b774f6ecae9820e91847f794785fbdf7198\",\"dweb:/ipfs/QmaSUvvjFYZT2NmNUQJer7L9qAz4P1KJVQ8Z2Giro9Cpxm\"]},\"node_modules/@latticexyz/world/src/modules/core/types.sol\":{\"keccak256\":\"0x256b3269e1e7eb6c8b6e26432bbe6799b4d45a88ef1b0e795ea71e604cec3a8a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://99bf6320ce9671ed74e7352b4e6c462d741ca9a894c48b526e7d8513308fa6b3\",\"dweb:/ipfs/QmRFJcWFMDRkg7soJ4r4MrqacKmj16vUEMFEGWJuvFi4vJ\"]},\"node_modules/@latticexyz/world/src/requireInterface.sol\":{\"keccak256\":\"0x229777eeaac1099104e10832f59bc02f3494a5b6de8225810a3b175643d97039\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0bf7e4df65be1808418d8dbb1decb346ec2a3b7a11b895818ae90f319522f795\",\"dweb:/ipfs/Qmco2UnqR9oop9ppY2Zbv1LWCQKGM99A7j6iWGsMCrwSmy\"]},\"node_modules/@latticexyz/world/src/revertWithBytes.sol\":{\"keccak256\":\"0x16795bdbfd7956d733df9ada1030ee7a1a714e3b9da5899149a7b07568c4af55\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a71128b4989e78215d5fc57dae8c2f84c6b5e503c159178c0df6f642b8228df\",\"dweb:/ipfs/QmNYTfBe62SdGESZ32fxME72CbAxEqk4j79jBT7655C4u7\"]},\"node_modules/@latticexyz/world/src/systemHookTypes.sol\":{\"keccak256\":\"0xdd201aa30700e70c35c1d4e50c375e511d798961183c8531f947c2d15969debb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d9c165b1beb7c1d3f75107407c34a5b3424ec8cb322d494892bceed23323ffb9\",\"dweb:/ipfs/QmdH8rtgJaENsMc6HodAbahKg7PiZUJwoZufnHCw3TwrBx\"]},\"node_modules/@latticexyz/world/src/version.sol\":{\"keccak256\":\"0x5db84611779a814a582b5559f636640e3599dba1f36b99c529a19ce73b2d2d44\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b06ae2f3b888ba3dc719b2d19f60deb7c3398324f636c9dad0b92706dfc08f5a\",\"dweb:/ipfs/QmaLgppohesJhF3ZdMWwM8NHcLiv8SRSCArS4QssfG2dC1\"]},\"node_modules/@latticexyz/world/src/worldResourceTypes.sol\":{\"keccak256\":\"0xc7e0aa6e4746b2d0e2eace7e462adf2f03dbc7f0c880794a577bfdbce426fcc3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d7538caf090fc69fff272049cfc00d0f35ae63ee700c2091b9cc4ed5709a3b45\",\"dweb:/ipfs/QmYriK2VpsVAePPLTP6mDZkTYMT9AkgmC2C93ktjVMDaP4\"]},\"node_modules/@latticexyz/world/test/createCoreModule.sol\":{\"keccak256\":\"0xb0baab0e9c67c1b945a95291aed4e16cf73ed7b95bc671076fd1a7d960e043d8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b603f7c656fed7e592cd598ca94ac46fab6ed31a6d951cf4661bc7f3f24166f2\",\"dweb:/ipfs/QmeNDUPYh3yuUj6oQ19VgKYruY1kDWenNhywzWYXeuxy39\"]},\"node_modules/ds-test/src/test.sol\":{\"keccak256\":\"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b\",\"license\":\"GPL-3.0-or-later\",\"urls\":[\"bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240\",\"dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k\"]},\"node_modules/forge-std/src/Base.sol\":{\"keccak256\":\"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224\",\"dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK\"]},\"node_modules/forge-std/src/StdAssertions.sol\":{\"keccak256\":\"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b\",\"dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL\"]},\"node_modules/forge-std/src/StdChains.sol\":{\"keccak256\":\"0x51e6eb138fc953fac1ac78012a39b3f16d9289ce06a222ba93bb0621768f96e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://653c577e054cf578594148a07b286571d494f401b6d4a940d3ccabd47b29233d\",\"dweb:/ipfs/QmTWDVvR4m82MGXWYY8BCaVN89TguQJSLqRgzHzrMkFHtx\"]},\"node_modules/forge-std/src/StdCheats.sol\":{\"keccak256\":\"0x2e1b4b99283c16efaf155f7e55ea357943cf6e61fc02aad060534349f63b6cd5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d471a35903e8a367a145ca5b5955caf691c723fe1117c6dcffd928d9f8d7c95a\",\"dweb:/ipfs/QmXGnFUGiX9APL8xit7NZQEYBoEL3wWyW1YyFoJQd2pGPe\"]},\"node_modules/forge-std/src/StdError.sol\":{\"keccak256\":\"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6\",\"dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj\"]},\"node_modules/forge-std/src/StdInvariant.sol\":{\"keccak256\":\"0xf5762db8ef95099bbe77578cd9349511ed77f4dd63ec98cc6b7cd711447830c1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a6b0360806a9804eac0f7e07492b5db9c4953c521dabb9a11b17dd610d5b804c\",\"dweb:/ipfs/QmUFozSt3W7drBRdm1cdRow61EABqSLJtkvYZXWmoHUPss\"]},\"node_modules/forge-std/src/StdJson.sol\":{\"keccak256\":\"0x9e2a7521190c462a0667706385f1c52a816220a9813ca8ac520fba7ba45d660b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d23017fe6570b28130a731b86179352b93a5fb5af32f11559837afc1186293c\",\"dweb:/ipfs/QmR3p6zG5Kmcr8gKocFCSopLHfXv1AziPJbH17nKyMxwxV\"]},\"node_modules/forge-std/src/StdMath.sol\":{\"keccak256\":\"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92\",\"dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC\"]},\"node_modules/forge-std/src/StdStorage.sol\":{\"keccak256\":\"0x391a28a2e54aea51a6fb03a3a48035304ca4d24bc669ddf3d4c152c7162e514d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://475fd0d87ccb0fdc4418dea2babffb4adb4aafb817e61f7ef31c2303f10c6c26\",\"dweb:/ipfs/QmQgcgtZxpkW6DRmbJszN1F8mU6zhaTZGdWWsj77yCuWN9\"]},\"node_modules/forge-std/src/StdStyle.sol\":{\"keccak256\":\"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8\",\"dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK\"]},\"node_modules/forge-std/src/StdUtils.sol\":{\"keccak256\":\"0x8758c42ba9d9e46868b796e2330ac239006ede07bd438a4b36dd6f2c47d27dc1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11f5752e0187b1e3631b875efdbe05d45929d05f1c1717105a9115d0a6628140\",\"dweb:/ipfs/QmUKkx9jfsUvjyYBw45RvrW1hTFXDXi2Jv5tbHP86mnzpi\"]},\"node_modules/forge-std/src/Test.sol\":{\"keccak256\":\"0xf3b62c75cea11a0e8ef8e6526e5e5c74ae47a892b9bcefc0e98d76066e1ffd24\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a41faaf836453e02c71fc272c80b3c90a614b30c9ba636512db0d033c7b93beb\",\"dweb:/ipfs/QmeQAreYYaxztQtFLQdHCzCPEorj9T5foSu2hQmxk7xT5x\"]},\"node_modules/forge-std/src/Vm.sol\":{\"keccak256\":\"0xb569d0b4398fad95f508fb854e832143edf69a897af4250f5f60fe195a2066c5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84b722ada97ea7bb841cdc0fa556aa36a02ff2d380fa24f6dc0717a71c6d9c7c\",\"dweb:/ipfs/QmfCH9Q4tvJhPM286GFsE4UCP4YncLpRu4Nwa2ZkHdRfbw\"]},\"node_modules/forge-std/src/console.sol\":{\"keccak256\":\"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70\",\"dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec\"]},\"node_modules/forge-std/src/console2.sol\":{\"keccak256\":\"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973\",\"dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF\"]},\"node_modules/forge-std/src/interfaces/IMulticall3.sol\":{\"keccak256\":\"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0\",\"dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2\"]},\"node_modules/forge-std/src/safeconsole.sol\":{\"keccak256\":\"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae\",\"dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq\"]},\"src/modules/puppet/Puppet.sol\":{\"keccak256\":\"0x8933512836ec527a90f1fd44cf01870b302cd5f080d1dc9f64ea11c41e46d2ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://854b7887821c26da985de13e8fb476bd8bd52c411284793789d19d34d9112f3b\",\"dweb:/ipfs/QmcHweSL5z6Mwro4dm4sLnzy7WmzdZud5yW7KQ36mnZTYD\"]},\"src/modules/puppet/PuppetDelegationControl.sol\":{\"keccak256\":\"0x8ba3488fee9e5503fa77b39609cfa2eed78be87636ada50e99094b0edc5a79e0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08214be4e0315011bb8c675c955f560865687d9129be342ab420bbb5d123f37b\",\"dweb:/ipfs/QmXFbsptKuD6fxKhhb7FatDBRE4seDnmefNB2WG6MEHHmW\"]},\"src/modules/puppet/PuppetFactorySystem.sol\":{\"keccak256\":\"0x47fc8ab186eba9b965c8cde4ff814eb9973302cbe1de6ee96f4539b62278fd85\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04eb1f7b3d964cefef88285546dbcbdc4f1c4e03d2364d37cdda5c79f9d9bb5a\",\"dweb:/ipfs/QmddEmBYqWtnd63FCZgnHz2ukk1ZFTwLv2bMkVYwsXTG5t\"]},\"src/modules/puppet/PuppetMaster.sol\":{\"keccak256\":\"0x7f94270573d344a1aea188e3920acab0f6c3befe9e7f27a1759df091f73db9e5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fc35076fb222a6e77a6968ef62856db69c4bb757f83f9849fe6abd8bb983002f\",\"dweb:/ipfs/QmVKRXYS1Xj1ckMZg6i9XPp8LbE4BXR8GL2XBfiFvnPnk9\"]},\"src/modules/puppet/PuppetModule.sol\":{\"keccak256\":\"0xc6a2f90c24976f7b3b6f342329bae302323549755b079e00a11266898e6f69a0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cd239b381ccb9b9387899f99f75d59e09d60020be65fe26dd7248309ae2597c5\",\"dweb:/ipfs/QmZVXo43p1Rao1H9eMdKuskkJQfiCUduDewrNRGuQREBHp\"]},\"src/modules/puppet/constants.sol\":{\"keccak256\":\"0x4196c01a6d6777b1387d69d7a310d54db2547edf747c07e8c6915752a27ea5ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://caf1b2b5df00f8896c29d6c105c19077a05e30ad1f61e950b445b38b77940a9a\",\"dweb:/ipfs/QmRohpQjvkoKn3WZvqERwwt29oTTBNggeX9nqoKtfqA6aS\"]},\"src/modules/puppet/createPuppet.sol\":{\"keccak256\":\"0x3ec80fa8b953772490089a2ec073109f4e06bdcb12ddc4f6501384340f64232e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://93ecfe683e78efc41c21ed5be647cb4654ccdbf38f8ef4358067f87b39dc997c\",\"dweb:/ipfs/QmTrt6U6BnykBBJqVmHQkgAxEcqZ6X5LHDQZgWVGVPR1X3\"]},\"src/modules/puppet/tables/PuppetRegistry.sol\":{\"keccak256\":\"0x26a6b1d36848665d09088daddc07b702d7eabed616742f2de658b84f049a30f3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://346f11ae7dfe0e9b13452e6e3fcd107e60a692528a7c5512b719c05277904448\",\"dweb:/ipfs/QmPT212GVCD9j8ZLLG49Ueq719a8TGynJ2fPsfjjGyuYSu\"]},\"src/utils/AccessControlLib.sol\":{\"keccak256\":\"0xb31878bda3f249c941719f6aa743bc739701418ed3effd2b5e6b4f28219e3f88\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a56bea3221f0663c35375beea4803b0d4ebc7e004828b89ef72c0cfec8e009e0\",\"dweb:/ipfs/QmPNZig8c2ou4uZFMjotG1CGT3ZcTU2aCt3C2RTSLkx3w8\"]},\"test/PuppetModule.t.sol\":{\"keccak256\":\"0x51a81a0d009fd6eb4d77c75a03788be0ef413bd114a1ede5f766b9161e3145b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3797e7482f2354a76d1a76a2db4842d865cbdd3eb31a009e35abed1bf62b4e6\",\"dweb:/ipfs/QmaTd6h5cXkMeGurBppUEgo7m36F58eJ2XfEu7RtrGjhmk\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.21+commit.d9974bed"},"language":"Solidity","output":{"abi":[{"inputs":[{"internalType":"string","name":"msg","type":"string","indexed":false}],"type":"event","name":"Hello","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log","anonymous":false},{"inputs":[{"internalType":"address","name":"","type":"address","indexed":false}],"type":"event","name":"log_address","anonymous":false},{"inputs":[{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_array","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"log_bytes","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32","indexed":false}],"type":"event","name":"log_bytes32","anonymous":false},{"inputs":[{"internalType":"int256","name":"","type":"int256","indexed":false}],"type":"event","name":"log_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address","name":"val","type":"address","indexed":false}],"type":"event","name":"log_named_address","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256[]","name":"val","type":"uint256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256[]","name":"val","type":"int256[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"address[]","name":"val","type":"address[]","indexed":false}],"type":"event","name":"log_named_array","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes","name":"val","type":"bytes","indexed":false}],"type":"event","name":"log_named_bytes","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"bytes32","name":"val","type":"bytes32","indexed":false}],"type":"event","name":"log_named_bytes32","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false},{"internalType":"uint256","name":"decimals","type":"uint256","indexed":false}],"type":"event","name":"log_named_decimal_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"int256","name":"val","type":"int256","indexed":false}],"type":"event","name":"log_named_int","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"string","name":"val","type":"string","indexed":false}],"type":"event","name":"log_named_string","anonymous":false},{"inputs":[{"internalType":"string","name":"key","type":"string","indexed":false},{"internalType":"uint256","name":"val","type":"uint256","indexed":false}],"type":"event","name":"log_named_uint","anonymous":false},{"inputs":[{"internalType":"string","name":"","type":"string","indexed":false}],"type":"event","name":"log_string","anonymous":false},{"inputs":[{"internalType":"uint256","name":"","type":"uint256","indexed":false}],"type":"event","name":"log_uint","anonymous":false},{"inputs":[{"internalType":"bytes","name":"","type":"bytes","indexed":false}],"type":"event","name":"logs","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"IS_TEST","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeArtifacts","outputs":[{"internalType":"string[]","name":"excludedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeContracts","outputs":[{"internalType":"address[]","name":"excludedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"excludeSenders","outputs":[{"internalType":"address[]","name":"excludedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"failed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"setUp"},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifactSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedArtifactSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetArtifacts","outputs":[{"internalType":"string[]","name":"targetedArtifacts_","type":"string[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetContracts","outputs":[{"internalType":"address[]","name":"targetedContracts_","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSelectors","outputs":[{"internalType":"struct StdInvariant.FuzzSelector[]","name":"targetedSelectors_","type":"tuple[]","components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bytes4[]","name":"selectors","type":"bytes4[]"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"targetSenders","outputs":[{"internalType":"address[]","name":"targetedSenders_","type":"address[]"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testEmitOnPuppet"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testEmitOnRootPuppet"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testMsgSender"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"testMsgSenderRootPuppet"}],"devdoc":{"kind":"dev","methods":{},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@latticexyz/=node_modules/@latticexyz/","ds-test/=node_modules/ds-test/src/","forge-std/=node_modules/forge-std/src/"],"optimizer":{"enabled":true,"runs":3000},"metadata":{"bytecodeHash":"none"},"compilationTarget":{"test/PuppetModule.t.sol":"PuppetModuleTest"},"evmVersion":"paris","libraries":{}},"sources":{"node_modules/@latticexyz/gas-report/src/GasReporter.sol":{"keccak256":"0xf0b03a19a92cd2e9950c25b6d307e5aeca4a64be8932194431197d0570e9bf3b","urls":["bzz-raw://ef2a14f0fb6e5bcab0c70d3648d247c3919c63eabc8b226be4d1f359d8af860f","dweb:/ipfs/QmXi1HgeUNmS9GwSFMDJa8QVT7KiENG9VjgBB78hpHrHV6"],"license":"MIT"},"node_modules/@latticexyz/schema-type/src/solidity/SchemaType.sol":{"keccak256":"0x770eff7a38b9b7b1613dc11ca09db4f28b42a117c9b39b2a06a650a58a250bdb","urls":["bzz-raw://39f544110658a53def52c2a4e33b8b158b95a4f14fccea58d5268b6e728d86d4","dweb:/ipfs/QmTesj6tjSFbfAiKUitXapdNYWPStS8bLkB3r22qfyHwUC"],"license":"MIT"},"node_modules/@latticexyz/store/src/Bytes.sol":{"keccak256":"0xe0bc789337c31551a3ad42fd63aba2489a3aa8567d9f3140b3abc9abdc0d2f1b","urls":["bzz-raw://6d5313aaa217e563083d9e4ded9479d673b17ba71a189b6a0315839812a5c57a","dweb:/ipfs/QmQJfHFMSPrS6p6q3rzKX6HDNCVsQQAWxGdd383FSfKChd"],"license":"MIT"},"node_modules/@latticexyz/store/src/FieldLayout.sol":{"keccak256":"0x7335db1982f43f867f90c3e151e3cc6d6ad40ee76401e2e06b8fdff257d6526f","urls":["bzz-raw://a49d381ef0a0defc90f41166bc7f45cf31e8d82d1517e6a323a90e79b4e45d1f","dweb:/ipfs/QmP46aGM8cYPkn6C4rGnrumcg24g7aUzCAez41zPs2rqhx"],"license":"MIT"},"node_modules/@latticexyz/store/src/Hook.sol":{"keccak256":"0xbe6448092b2d0c77a7cb282e8a452732587a6e04802ad21f4da27a9d6ef1496a","urls":["bzz-raw://1d098409f9352637599b897d046ad23e20894ea3a8460687df2a13d2d960966d","dweb:/ipfs/Qmd3w6dSq3kQVQQtH94wcKRzkaNEDWcE2m9bgbWWDqNE3w"],"license":"MIT"},"node_modules/@latticexyz/store/src/IERC165.sol":{"keccak256":"0x2bbc3c43400c15a91a5cb35430a91309cb64a4d13a0a170eacec71dcf334feaf","urls":["bzz-raw://f44dfc9605067de539de07a76a34bf469faa9e6dad8c192abafc2e05860c7dd2","dweb:/ipfs/QmX8xgG6XWokM7YFwFZvmMhuh1uhkSjxCMD2oTHjUVdapb"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStore.sol":{"keccak256":"0x9092b65551d0f910e5645cebb5acadb387cdd192d75fa89cd6b293bd65b28827","urls":["bzz-raw://478825a6f7eff9ddab968e71e1d55ebee279d3b318f10976d9334384000059c0","dweb:/ipfs/Qme7NY976woRy3RQjE4tkkiwoXnoVtTmER3PbWCSbjZ2kb"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreData.sol":{"keccak256":"0xa8eade05c551aeef35c84727d7a44af239516deb2d8a0cfb7ebeb5d88c6995e5","urls":["bzz-raw://5335910bd8a204abb5f4396fb911a5ee5c221bd7fa63b1cc8ae5e737c6458c6a","dweb:/ipfs/QmckkCAfrNcWo3yDxoD1jCe1k4iDA2GzVDpFjJZs7W79vx"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreErrors.sol":{"keccak256":"0xb9070663ded3cad82285bb7610949e422f88abb48c2ddbd792af83d127d64212","urls":["bzz-raw://830490f1c888bec86df1e7ef43773d60ebdbdfdb2b91ab7fe074e2f38d7439dc","dweb:/ipfs/QmS26fpXdZuGgMmjcdQDf9k1Bedn2dhjk9byFZJoNkctPZ"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreEvents.sol":{"keccak256":"0xdd3104680808f975462a85cbd4fa87783ba5395797419caeeca37e8f8627a16f","urls":["bzz-raw://943864b7eb16ad2047ade5a8598e85c8a4b46d1aed6aef02bfb7cee8de732b4d","dweb:/ipfs/QmTEij4caToSNk15PFpubXYDy9QhwmPyP9tMXjUse2cTdv"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreHook.sol":{"keccak256":"0x9c3ba4c889db2cc2155ddfc966f5df45cf73739cacc358e0ed71ee9d34d9cef9","urls":["bzz-raw://0bc8e8abc3d5ce2af06c3a9f37ebe69cb287514c4572327b09d26121133646e5","dweb:/ipfs/QmY7BmHTiGAJabiLZXLx2zsRs9HfZzK97kwmnwfCidcHZ5"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreRead.sol":{"keccak256":"0xd2180d53ecd31069b1166f170ecdcd85917ac50f45fc26fb39b49cee7ba00e37","urls":["bzz-raw://1494bb0a3228e2d194bddaed4761fd3ca865979f0e3f3a53acd271143a4aa0ac","dweb:/ipfs/Qmaddnzzmu99iP9dTWK9ZeByh5dZyjY9SpVnRdvyr2fBAo"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreRegistration.sol":{"keccak256":"0xf448fbb2bc9c982721a43234463656da5a49cea08543e62148d54f11e1ac3e2f","urls":["bzz-raw://64b3579d9b9dcd73dca2beab3d4fcf60237420945ebbb2e9f4ffcc88f4110115","dweb:/ipfs/QmaW5nN3zGEriSYHncye6Nz2TkAw1oo1CyG2JuJTJrJoXg"],"license":"MIT"},"node_modules/@latticexyz/store/src/IStoreWrite.sol":{"keccak256":"0x8b6c7af5ee330928aebb58c8872d3944304ee10ed11f8a325b6accc4ec5df81b","urls":["bzz-raw://b866d158701c7a40834bed735194b804ef219f2bbe574e2307785fff7bcf9da1","dweb:/ipfs/QmXzJfZkXVfyr2RFGwDuazeVnV3UWYmQxjKZ3KzFbbe75U"],"license":"MIT"},"node_modules/@latticexyz/store/src/Memory.sol":{"keccak256":"0x69295976e61a1a108d1b4d6eb497b238730309f3047c4320d48e01a0ce8d4ec7","urls":["bzz-raw://559c451b21fb9dd4fec27b41bef42f4362f1e7ebb7992106d548b9d4f733b3e5","dweb:/ipfs/QmeSE7YTW5zUrfZYFVb2pFnDe3XxiT8XNecfwC3wfpxCRv"],"license":"MIT"},"node_modules/@latticexyz/store/src/PackedCounter.sol":{"keccak256":"0xf2ac4fe9b94aba49819b8bfd9952a73e21bd30aa956aa3a0ba4333d0e4891e91","urls":["bzz-raw://c41b0bb60c662aab1287d0ec92cdd7ce07e6a732ed8d5e6045e14c7ba49d4ce8","dweb:/ipfs/QmYMHVsvJpDrpFW24uHmJFjA8tbr7WjyP4KAFnroApP7Br"],"license":"MIT"},"node_modules/@latticexyz/store/src/ResourceId.sol":{"keccak256":"0xd886462cb60be5929d17bed2740225effa8149ef6358378e9e1f385d58673be9","urls":["bzz-raw://6f66f49397097f9445159417fb61bd362de7849b1e572a3a9b5cb0536636a3d9","dweb:/ipfs/QmPYEREcaUyoqykx4hjJG4k3P9HYmAM4gAxvGsJT6yWqvn"],"license":"MIT"},"node_modules/@latticexyz/store/src/Schema.sol":{"keccak256":"0x58aef318ba03f8ff8866ef70f8a30f549b150657ea699734aefe16c298956401","urls":["bzz-raw://7dc104690a7e2bcf5ce1afadcd58f8ef4d639b4b92b9ad9293656235d54395f3","dweb:/ipfs/QmYJJvEv5KBJ3kzf9AkgRn7Uu5dp4exGTRddf4cae1btgE"],"license":"MIT"},"node_modules/@latticexyz/store/src/Slice.sol":{"keccak256":"0x08f813a47c9b17e647c4051b310fb7b04e2af87c5440f4c916e4e6b5bfb29710","urls":["bzz-raw://0a7966452656a25e3555e39f10121a69690b0ecf23524c073f61f9ea31a922f3","dweb:/ipfs/QmQiEsLYyZFBZbcAbzwSK2dKxpj7xbs7CPLt3py3uGZSSN"],"license":"MIT"},"node_modules/@latticexyz/store/src/Storage.sol":{"keccak256":"0x5a32d464b56d13b9cf93f15c366e1ba8c4e2242bbad3990829c7f674e49ac2f7","urls":["bzz-raw://adf1460050534fbdf4b2615c9dee03aed9d84bc0198cb082b10e579ab01d568e","dweb:/ipfs/Qma2zugjeP748bkmbYhqVrzrKcdn18KLH3TZMfVuhHq2M4"],"license":"MIT"},"node_modules/@latticexyz/store/src/StoreCore.sol":{"keccak256":"0x6f21b3b6e6c202a1f9a5ba3ce7a656d38b51e1f1755a7ba3d1bc4c083a94aa94","urls":["bzz-raw://e5499fa030ff8dee5db70851dc678a9f0eb7c2a548f27fd5a3ecd0b44038642a","dweb:/ipfs/Qme3ZGKP1YYMt98rFJ8uRRZ2jgWaqNdKAS9HaEP4HYPrB6"],"license":"MIT"},"node_modules/@latticexyz/store/src/StoreData.sol":{"keccak256":"0x4e451128c33a01d520c1944b3db42a62c158aea8fa11e786a58a0f719a189526","urls":["bzz-raw://c2f98f30a7b2c9ef020e274b87ae0fa66d1380343a00ecf6bd796ae31cd9b279","dweb:/ipfs/QmYXHSBn4Hp7cimDLKy86ep23v2VRUS6dLPevcVMs3dJrw"],"license":"MIT"},"node_modules/@latticexyz/store/src/StoreRead.sol":{"keccak256":"0xd918972009bd009dbad7032b8ff076928cec18c0891bb12493a1799df83e9cfa","urls":["bzz-raw://966bb2090623b9a6aae0e5df9ae4c9c21bbde97867a239303c934c765eebf738","dweb:/ipfs/QmRui6vJ8UfNHAueDyRuSXfW7wwuxRxAHgGjB7wVJEB6cJ"],"license":"MIT"},"node_modules/@latticexyz/store/src/StoreSwitch.sol":{"keccak256":"0xf132af10f960a498f49c0534027056e715f4bdcb8fbdb53ac6879c92309ab416","urls":["bzz-raw://e85a09aeb7543bcd9d74b7ad319ae61e1f7f15a6a0ad9e79aff750fbd18111c7","dweb:/ipfs/QmY6xgqeeaR1FsCPLmFbVgjm1D2UyrXNABKXWLfFaSmBhR"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/index.sol":{"keccak256":"0xf337a5abb2d43ef00c1c200e7fbec30fc89c7c701e457ab4277194b700d2aea3","urls":["bzz-raw://eccdf6158076b4e8f1b587a0310228f53323705e054a44eaa7733f38805c3ee6","dweb:/ipfs/QmbXEVNTctg54dK9awdCVyAjeuUjR6ckfmmXBP8DrFmjyq"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/tables/Hooks.sol":{"keccak256":"0x6ba24d7c79f616a40a5a28466a113c3b491196ed43a236124ae9f52f940ebae6","urls":["bzz-raw://c055a11a1a52d820e5f71c1434b94b2083304d94655d7dbcefb7c7b4e42a095f","dweb:/ipfs/QmUU119ZHn9S3ExK8ZhNyHbdxWMu3RasLDZco9vR9KDQJw"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/tables/ResourceIds.sol":{"keccak256":"0x0d5cb177f2e3f968b5d8962727ee95f6ec12f2f02635bd3388e8ba658a513782","urls":["bzz-raw://6c1f989b97f782ba8a7b7aa85c79564a4eeca21e8c0c255d287d5a2fb42700e9","dweb:/ipfs/QmXVeQ9p6b8GRMYE8QWPR89xRsMWRQsxPMgQHsUvMWbLeb"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/tables/StoreHooks.sol":{"keccak256":"0x92e5306a8572903c6ed2ede4713de8356221511aaa9043a115010d8dc504d95d","urls":["bzz-raw://c36a58e47472e86c8b995c33eef1be95c7073d30e8e4b59b4c65413cbe34f695","dweb:/ipfs/QmaHP8apm4XnMSQkMT4Wysu8LxVSnH5JcPne5PV8YPyJNv"],"license":"MIT"},"node_modules/@latticexyz/store/src/codegen/tables/Tables.sol":{"keccak256":"0xc1ce9530a25c9e1ebc6a4d1789f26b9607f09b38132a64ced9cfcf34e3011e91","urls":["bzz-raw://d67414de99946c6c199fce2700a2765e279d4fa9c0ff665035193883221979ee","dweb:/ipfs/QmViGZuPahjSGa18UtAjSXbAao9wuMK4m6hxjtX6pDqqU7"],"license":"MIT"},"node_modules/@latticexyz/store/src/constants.sol":{"keccak256":"0x9e37c64c119ef07ad914bc589ee3f6d67946ab95877978c1ee3e2c1ffae07076","urls":["bzz-raw://3fad47e542025382aa28e8171253e34f93b2f149434b67a26989542d70218793","dweb:/ipfs/QmW6JsKNwPc6oAMrgcikgR2EPwMUtQANiuZSQSGCd29HHC"],"license":"MIT"},"node_modules/@latticexyz/store/src/leftMask.sol":{"keccak256":"0xe050786c52cfb1da012bba86744d2a89f8aa6507342e498c96fbe013b0d6302f","urls":["bzz-raw://a62d2f8eb85ddc6de911a0b415bbcf666001ecfd15e681f718cb9ae053a3a793","dweb:/ipfs/QmXZHfKXZNQRJMqLpS15kgZgMfMUkoB8FhypDWDaYaqtJG"],"license":"MIT"},"node_modules/@latticexyz/store/src/storeHookTypes.sol":{"keccak256":"0x60880298016fa117ed9a43ddfd020f11d98a2d345bdcb08e5884e40df98eddd5","urls":["bzz-raw://3619dfda1fd514c0fc5fb34c14d5b5aa41dd6ba6045d37d5f4c8199f3a826f81","dweb:/ipfs/QmbzRBYfVa423gNzCitpGN3i2N9oeGYfinVE1jgtqxnNZX"],"license":"MIT"},"node_modules/@latticexyz/store/src/storeResourceTypes.sol":{"keccak256":"0xada1867ba72930fc5cf5562dd4e36de849dbac9c833b7969cb1b046a808fabf2","urls":["bzz-raw://6e4b5fdcaa54f567a3f8561c2c3fbc0d68c8dad892a4a8e5418bbce8efc53d84","dweb:/ipfs/QmTWbYJX1yrCqrEwUKB9rGpHdRvLNU8GCkBbxnLjGD4d2t"],"license":"MIT"},"node_modules/@latticexyz/store/src/tightcoder/DecodeSlice.sol":{"keccak256":"0x1af0fd984640123391ec2df855d00298504b7ce186a56c2caca769cfd9e08e04","urls":["bzz-raw://7305a62318890d2cc6420ba7dec13d9f2c1cb67ac689015fc83b9cbccd0696f1","dweb:/ipfs/QmR8jGNLbt64Tv1YZKRVBCVsd71oeUQFzGHHtpsrs4PuRq"],"license":"MIT"},"node_modules/@latticexyz/store/src/tightcoder/EncodeArray.sol":{"keccak256":"0x1c280d24360282e196d9c4833c58c2437108cea2af0ac7596f95be81389e306d","urls":["bzz-raw://6b4556b6eeae9328fbd9adcce346547e823c397503276a4d63effb67e00b5b49","dweb:/ipfs/QmUsynVsMYzjh8oJR8YB7SRrwFMdXcsQsHBrXxLEEFxsiB"],"license":"MIT"},"node_modules/@latticexyz/store/src/tightcoder/TightCoder.sol":{"keccak256":"0xca2e2218bccd60ed690f29152b234a553f3021cad4903c0cfb5cf757fa41d650","urls":["bzz-raw://65f3bf5b851072ba1367ec74b3c66cab6185f3c8c8d6ada007cdc8c513465d25","dweb:/ipfs/QmdHsBNc7ccvTK7VDB9yAktdbRNBrEsUdBNFZTqdq8Vao2"],"license":"MIT"},"node_modules/@latticexyz/store/src/version.sol":{"keccak256":"0x01029999a48b7c1d85de84cae465dd24ec126c95b8a865cd20c7ed5dfcc0f02c","urls":["bzz-raw://9750164ce996badb0fd7df2f526780b9cb9558912405fe46f31064bd7c522491","dweb:/ipfs/QmYf8m2ZXFANRc9ysHgNkNtSF327ccxKYjCUJ49UXBKADk"],"license":"MIT"},"node_modules/@latticexyz/world/src/AccessControl.sol":{"keccak256":"0x963a4fc3983bf92a473e67f49b62b8f52d94360bb904664b24bbff844e6a4a41","urls":["bzz-raw://2cf0ea9f68a1a9738b116259dc2cb06e98cc591d82b2c271b0e70e8daa742952","dweb:/ipfs/QmRVxuBtGgw49v3KGm3HTBNS5ZJ9wEvENwipJEFEtoiaZ4"],"license":"MIT"},"node_modules/@latticexyz/world/src/Delegation.sol":{"keccak256":"0x09324c2d43eac847a312e1879de1019d1b6eb333d9c9e0d42c449d76f5d9fc89","urls":["bzz-raw://bd6f751c31f1305ffb328b1cd4bcc3999439f63f2b8ad9a33bbebdccdf60e716","dweb:/ipfs/QmRfj5xWwC3wzFr9iAQBr1pAQmLYPJhDRXyRcJpYfhDdoE"],"license":"MIT"},"node_modules/@latticexyz/world/src/DelegationControl.sol":{"keccak256":"0x1ed755a4addafd3d0fd1b527d46ea9951920496f8104fa836b297b2544d6fed0","urls":["bzz-raw://a55b1fa9ac9bd53177d529fd9a000d5e4b455a6aec23004c71365d352c6e6fda","dweb:/ipfs/QmWhetkDnCTiyi8C6qZf23misxJfnGWjesStFZV8sdD8oe"],"license":"MIT"},"node_modules/@latticexyz/world/src/ERC165Checker.sol":{"keccak256":"0x26204bcfddbc272eae391f4512a629f53697867d582ea8cabcd6a8e04a255270","urls":["bzz-raw://46944bac8253250ba3f645a6164df8e996738bc76a544867677e54ede57619a1","dweb:/ipfs/QmY1XSxQY9MuQSEvGaeQT6kqmeJ3VhYyRRTfzCkRmdsWsX"],"license":"MIT"},"node_modules/@latticexyz/world/src/IDelegationControl.sol":{"keccak256":"0xbf3da1c6ab38b3db62a4f4dd0235280d1fb07d8d465a145d6fd9eaf4bb4c3553","urls":["bzz-raw://30205a69d660ed8de5bf34ee73ec9033737d544bc7572130c439b2467606469d","dweb:/ipfs/QmUWTNdSW1bxXjaQzMUCLqBBoLYYre7CgDko4Qy12DaRNS"],"license":"MIT"},"node_modules/@latticexyz/world/src/IERC165.sol":{"keccak256":"0x7997ebbdee6a2493f28e7032c7a8b906ade40f807d95734e2653c8f1b023ff47","urls":["bzz-raw://c8ca41bb2619bf27e5bf886d1322f0e2dffd096c49f7ae6e716541dd1e1ddce5","dweb:/ipfs/Qmb8zATUWWTtiWaSLjbAe6PGnJPes9ANvEyk7pYoWR3P3Y"],"license":"MIT"},"node_modules/@latticexyz/world/src/IModule.sol":{"keccak256":"0x9ace961d4e283e0974762fddb14bb15e256d1d1086c813957fa0a0c9abeca900","urls":["bzz-raw://3ce3e6875d5ae61e12f3a36b8cdd2aa42e137f4d356109f89101fc7ea2d38f35","dweb:/ipfs/QmbCarvuyKZhaEKebPnzwxCrXPGZvZB5AnJxfXgCgex9py"],"license":"MIT"},"node_modules/@latticexyz/world/src/ISystemHook.sol":{"keccak256":"0x96b32546011ad67c3d03815dfd9375e9f8a255f98aaf89880afa1c8548d372b9","urls":["bzz-raw://c58294560e554b8d8c6e3e870768523aa034631d4908ce25e730bb372ce7795c","dweb:/ipfs/QmU9KfaZRNmQdoZE5bNrMN6QJCm7HGfsCBPvBGbMLLq9E5"],"license":"MIT"},"node_modules/@latticexyz/world/src/IWorldContextConsumer.sol":{"keccak256":"0xc7da95c29b6dc76d21ea866139e4cefeceeec094326811a4e5afafe494d6a881","urls":["bzz-raw://3048f85d42046b460ff285e38091a18ff848a489670e278b233669baecc2d6ef","dweb:/ipfs/QmPbeYVnPefPmtpaXXAGAjEGXjducZf9sF8fKqgfENCpwj"],"license":"MIT"},"node_modules/@latticexyz/world/src/IWorldErrors.sol":{"keccak256":"0xc3e7975e5785574543229eac51e3441f4185863d7f5346c0ae08a27b4541f8a7","urls":["bzz-raw://62cc0dc109e6e5475bb07fb95643a31c74337c23521db0557a36dad6117a1e83","dweb:/ipfs/Qmb8jbE1XQTUdreKFr4Jw3xmjctaLuReRZjPxZKQ2uW9p4"],"license":"MIT"},"node_modules/@latticexyz/world/src/IWorldKernel.sol":{"keccak256":"0x9dc133cb55dc23fd6fcbbef8078bb4ea9bf67d698400cf89fc62b905b60cf5eb","urls":["bzz-raw://7c1a57df7052218483eafe72d873660f39a73e2e06c1b14ad8a579d85b94bc6c","dweb:/ipfs/Qme7dnjvADGZyM2L7nZ51nSjsjXXF9isTVCpWaUCd1cEGs"],"license":"MIT"},"node_modules/@latticexyz/world/src/Module.sol":{"keccak256":"0xd0060c58956a1fe0855bcd9099e8764922f0d3b96f9683bd9622b8da05524f19","urls":["bzz-raw://6098c318c6b2606aa0a31554c6dd5923b6c106c24daa2f1119311cd4f4e47bce","dweb:/ipfs/QmZTSSpfmNWakCYvFFZhd7zjmnkNPuSeYKhfCQwZ2gjRWL"],"license":"MIT"},"node_modules/@latticexyz/world/src/System.sol":{"keccak256":"0x7bece0ec86fdc458054e6db0ac4316fc98882fa3ba76b2fa107d3de5382053cd","urls":["bzz-raw://d154183426723bbf133d4dc5f8d051e9521f7b7cabe63925731fa4af99379cdd","dweb:/ipfs/QmZXxPGcqknGLCwTByaZFKhqvKbrfiZkywmnh8buGTC2Mc"],"license":"MIT"},"node_modules/@latticexyz/world/src/SystemCall.sol":{"keccak256":"0x2ec34d896ea59d4bd47b99c1c1476c9c8f94f21d8af5f35ceebfeced4dd48ec2","urls":["bzz-raw://97dc97678b209c5e69d8b45adb3fe8c8d8b8fffbd725a8deb462c790a6a58a01","dweb:/ipfs/QmbUntQJj9n55PDjXcdJtmsWSPdWzyhbe6UCK9iHJuq3XM"],"license":"MIT"},"node_modules/@latticexyz/world/src/World.sol":{"keccak256":"0x2fa1e13f367a2110bce824ed5fc8b3d74cf60b0075492a7831dc887fc47de54b","urls":["bzz-raw://a7afd2c5fddf3d635a25a03aeb34991036ec8a9a59f44ea323f8c1f3f17bbf14","dweb:/ipfs/QmbYiNvJmD8mCjeAY83Jebb54dTcgYd4Knr9jbKnMcDwf6"],"license":"MIT"},"node_modules/@latticexyz/world/src/WorldContext.sol":{"keccak256":"0xa11d93077d94f18683f1098b69c4713a48001ae15054476135ec9569041abb9a","urls":["bzz-raw://9b1d3384def68b4061c445b55602dd9cbcd4e8c58c13db5e945f284a05c1b518","dweb:/ipfs/Qma5DUZrSKZUxrxiGCpyRPWMJNdHU2wu6qDEsFWEJSnLfN"],"license":"MIT"},"node_modules/@latticexyz/world/src/WorldResourceId.sol":{"keccak256":"0x7daa706e844ddc2ffa9ff2197139fa73faee614030c5d541e339c219129005ff","urls":["bzz-raw://62da4413068810e6fa32ef87b2a83386a0084ec2bb26722515127e5893281cbc","dweb:/ipfs/Qma5SLsHRq3igdXfKz24XSGfMd3dXyNxv52WSTsrcLRWPV"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IAccessManagementSystem.sol":{"keccak256":"0xc912f14d0f2e2e9e728a9d18e250ebe3eb2f51d0b4d79993c9d997991bbd5593","urls":["bzz-raw://29621425847a1c11205307896b04e2a6c97934dd619f23ce6774ce52520f1255","dweb:/ipfs/QmeuTe3q8U11Dqkp5tahxVWnp9Cd5ezQmRZ5vhEHtv14Eu"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IBalanceTransferSystem.sol":{"keccak256":"0xf04594c29c5c5b3110453ac189a8008735753de864ab4a7dfa97ccd3ae5f4a55","urls":["bzz-raw://4a3061f72b969a294dc96c3b2e59277e762ce6571cedcc7e280412431453dde5","dweb:/ipfs/QmWB9aboakrCH9AmzGiZ1mCceh9atF4ks5ndEYFzUVbaHT"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol":{"keccak256":"0xf103db760a912d42dac0c409feb2d1929864ae81f89a7186047ea6f98b9db2ed","urls":["bzz-raw://9ee556bbf7f7aa2f221e1f5a9d80caca8d4e5bc9282f59d5611a7c9ea7c06024","dweb:/ipfs/QmQouopBhk5VuzdUSVc9MC3C5nhbm1MgHmQhemf6w66WxE"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IBatchCallSystem.sol":{"keccak256":"0xb4d323470e22b1d3f0168a44196eb09466f602b7564c75e5739c5f53a5036f97","urls":["bzz-raw://acad752208d00b731baaa1cfa192ff3981001fd030953bdc604e4f69ec2cd0b8","dweb:/ipfs/QmRFw3RgmX2CHqg7PqsP3rqVKxBVYNq5hHcFiyA2Y7iAaX"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/ICoreRegistrationSystem.sol":{"keccak256":"0xb5e41596b245dbb0f4317174ae08c963a55df07cfd1a2e65bd082628bc446350","urls":["bzz-raw://007f0e50c7f40d3932c5db51f729148f7d67573ef2f429043d901c7b017d7f43","dweb:/ipfs/QmdmnY9RFyGjhmjSif3wZYHSMhtkTNhxi74dzVzsQBgi2N"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IModuleInstallationSystem.sol":{"keccak256":"0x5be1d1ee90a7a03258e8c4fce7542453332c637a51b015e0cc29151ef2792263","urls":["bzz-raw://df6d97356b2ca9d97b7593f4c0772742529fea73f1665e55a879a368b399cae0","dweb:/ipfs/QmXCs5X4Z95isKRzjP4TQjQxwiB7773tHiJWLWkjLv3SLj"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/interfaces/IWorldRegistrationSystem.sol":{"keccak256":"0xd7e31957e7fcf056912fe16e10a0411bdb071c14c45853e7da264dfbfd6bcb62","urls":["bzz-raw://c4ce02327ac8971177685fc2655733ed3c07f5dfb72846680544a48953180aad","dweb:/ipfs/QmQMNtkeCXdZfyyvtY8vUrKh5RUbpM7HYMGrzbxZGzTEFh"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/Balances.sol":{"keccak256":"0x2fd9727c04a06dacd957c320e5c91844e389df164a02f6c35e169852d974a1f8","urls":["bzz-raw://cfab99486f9011db6590d75947a8510540bc5d6160866cfd1fafe16daa024961","dweb:/ipfs/QmPAyaKJwhawWcyegfHv1QkJYzdAMpySok2gDKVPpw1rvD"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/FunctionSelectors.sol":{"keccak256":"0x8bcbbd417bc83b92c1d40444cf2e617d8a5c7e4d7486dcc3467fef2470338bcb","urls":["bzz-raw://aedd3d896ccc900aa9a4f53ec7a9245e5630f51e847a0e2356e12e4492084a8e","dweb:/ipfs/QmRQJwy5XYHGXT973hYdPUR6cG8fSDPi8kPgprYJXUfuVf"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/FunctionSignatures.sol":{"keccak256":"0xed3112d1dfeb8afa9be21cc3bf70f7af31b0443e9579f080e7ac2640664b8426","urls":["bzz-raw://571277bf66022fb97fb43948379b560c6d6904dc0272f91b30d3ab16a5b76c91","dweb:/ipfs/QmNhb9rrrW8KXzLfg3eiUR86hnRhaD2kzN5mAcWuWQ4pu5"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/InstalledModules.sol":{"keccak256":"0x334f30cf5cac3f795cd63f15582a6a50c91c91644000a1a5c3005a4c17b075ac","urls":["bzz-raw://79369df71ea24d4eb6579f9edc5ac3f8c8d4fe2563db7438c957f7cd8fd696d4","dweb:/ipfs/QmZBQv6xBpXWocxy4nX5o8XJYuvi88y69YmHJYUGgGFRN9"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/NamespaceDelegationControl.sol":{"keccak256":"0x760eec42bbfbdb497a80fa704956c82bca38d21ee220a1671ac7fc1364ddc0ed","urls":["bzz-raw://313982b1791750271b460fa94c3ea54eeb2d88b3093ab2cace6014a6c9ee387b","dweb:/ipfs/QmVagcNagZkFZeVieECp53rjZEYBB6LU8HP4BjKzfiC4Qr"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/NamespaceOwner.sol":{"keccak256":"0xb59422d88ec4d7ea5870bfbcd26cce216808aca2524d78be044e6246c2e0c8cd","urls":["bzz-raw://690489521124436a18dd3b2efc1c28636488414b82c6dabf743bde1c8f9ab70b","dweb:/ipfs/Qma89LxYq3aBdNZnsiH2qKuq47gmSn9QpeoFe23pahus5Z"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/ResourceAccess.sol":{"keccak256":"0xa6dd49d8d3bc8ce68d45ebc01f087ef83b1d758e9967322fd15cf641331c2527","urls":["bzz-raw://a80f0382a7bad47b1b947bc9b447eafb35599b0e11a9bdcb45c7cddb3bc1375a","dweb:/ipfs/QmRBWAsqUya6uxXn5fqJPgnkytDfp8HXixcymwTmYKuoPc"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/SystemHooks.sol":{"keccak256":"0x43cb675401e3e464a93ae0ddaefdb6ac03b734b7226ba89b8727d6421e50e2e8","urls":["bzz-raw://6a37a9d6881779113b1b78b0e9175b64089da881be1176fc764ceaee9fc65436","dweb:/ipfs/QmXgCyyJUAAn99Czgv51nkr6qi9hFduhJpybkn95ipJHJL"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/SystemRegistry.sol":{"keccak256":"0xd0128bfb43b2afdc0c0410b6a642ce7b5ae4e5c90c367e542ea0b3e8d02eba22","urls":["bzz-raw://59fd7075792470f625e15e7c7a5d377b6657b26ce22a82c705888c2773840330","dweb:/ipfs/QmdPygA9VW1Zdds4FTejEDSEKzaPWDFvXP1VqsaJB6KF8q"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/Systems.sol":{"keccak256":"0x20ad3ee26ef118cb8b055803c4a5ef2aac4791ce9e8720fc6a549120c53ab37a","urls":["bzz-raw://58c1a2e3abb381a36696aeb3588a2604706e88b8505caddbdb696f96249e6231","dweb:/ipfs/QmQvPVUFGBRpbaK9et2L7rVVmCByD1gDhaFvtJNL7cM7d2"],"license":"MIT"},"node_modules/@latticexyz/world/src/codegen/tables/UserDelegationControl.sol":{"keccak256":"0xa9a5ebaa93ce6fe8b1f2cef5fd1350ea755d2ab0ff7ae2a5c369e493c2d205d5","urls":["bzz-raw://5ba46cddd36f4a69e120e11edb0cbb8cd8d8363636544fe21e9712e41786f231","dweb:/ipfs/Qmc87CiTYDULyEwTZmbfHcrqx2gNRrkSakYdS6wRXi7LQN"],"license":"MIT"},"node_modules/@latticexyz/world/src/constants.sol":{"keccak256":"0x07faffa7dc4a2adc4f9bfe93d5a59a7dd89241d360996537608e38f61c2d0588","urls":["bzz-raw://b96d4ce331b257a24de2f18503a11b986ed32d218810db9d5e3e7eddc17c2218","dweb:/ipfs/Qme7Cw4RN1eaFWt2j3hk6ZMB7GWUfMY5oyZKYfMvAVxdBc"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/CoreModule.sol":{"keccak256":"0x1854f68cb404adb13910c7cb5dc91b4db83b33705a92717485df16742acfac43","urls":["bzz-raw://1119dea8f6a76977e6327b789fae9023eedd63df9a50b6a7b4c6190f02de10a9","dweb:/ipfs/QmXJ6YthgxX5ybpCgcECBHC2uPnycnC7mzh3KTbF9vZWDz"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/CoreRegistrationSystem.sol":{"keccak256":"0x4969fab8e65df062b3ee1d5c55c5dc980b4c8d531a90977e5f318500eafe2125","urls":["bzz-raw://94ca575dec2084e8ec0558c6866af383fea4f5111079f06db8c78b1a7dc78417","dweb:/ipfs/QmZCHfyhMQ4Z4sJvW9uzYhuTNTThoRwH8Usqx6q95AbNSb"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/constants.sol":{"keccak256":"0xbe6408440b758884cfff869ae6c8aefa476ab97b07855dd51571bb358e9ecae0","urls":["bzz-raw://854427618d6d700c2dbba45cc475bd341b14612d4dc05af687371dc725e0a11e","dweb:/ipfs/QmXueKPv6WDyAwjwej5XHnBTMQeUYEbtgNryqt4Tnsj3sK"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/AccessManagementSystem.sol":{"keccak256":"0x29cd0f1a2ec749bc25774682977cad4dd238602a3b4e926cc08bb7781fabf2bc","urls":["bzz-raw://98d1f0b23e9ed303b543e943abcb5641d0744e2c1ae003df6dea877a070f96e0","dweb:/ipfs/QmfQj5P8Lw6DfMfVnhsAaDCtN6iYfKp8V4uxX5LQQnzxLo"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/BalanceTransferSystem.sol":{"keccak256":"0x8170eb46e9716b8040b9a95d8740e1e897538afb1da95a1994cba7907522b4fc","urls":["bzz-raw://b19dbd9f3ca1f541883879985589095f851bdd201d9cdde2d6742dda9ad01a2e","dweb:/ipfs/QmTgSMvsVFAEMK72D7myoJtEykDxAMweueJNEagSChyA1Y"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/BatchCallSystem.sol":{"keccak256":"0xf24b9cc96cccb8ef98c9aa8585e4a5c003b3b8a00c5a9c6db5c750460960a7d1","urls":["bzz-raw://afa918bcba66835a0866a11c5b43b5da11d68fb68c697f89a273d5dd3a5f1f5c","dweb:/ipfs/QmZyyVdNoUiyLMimmNkZkQv5o86k4sGyo1CGEMrt794eC2"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/ModuleInstallationSystem.sol":{"keccak256":"0xc9b0efce92d9be51ff564fa18efc13365a64cde8dd2e2ef88bac4abe7d432a3d","urls":["bzz-raw://86d2a49cc96ad7e783490c6e44aa2d078444505edc49d1061711200a607441a6","dweb:/ipfs/QmbKkJnRkUE47uWwmhqqmaVozRXLt45ebSZbZnpJpnJfvj"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/StoreRegistrationSystem.sol":{"keccak256":"0xf7edf07894b8c6938b77491d36944d22b37b9e9e8105a689120f66e76450d3dc","urls":["bzz-raw://55be67cb294109fbb9a323c5f788aa7d1b844f7bc57f5bed6b758d2d80447a24","dweb:/ipfs/QmUv8FwmcV6mP2o7aZiZkRxrnQdnaRLYiFWs8ifaEadKJr"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/implementations/WorldRegistrationSystem.sol":{"keccak256":"0xbae6190d740add0ee986f82b1143f8f160d232e0f3c2eb4d7908040f07b45427","urls":["bzz-raw://022b092b8757770e5799d22de9b09b774f6ecae9820e91847f794785fbdf7198","dweb:/ipfs/QmaSUvvjFYZT2NmNUQJer7L9qAz4P1KJVQ8Z2Giro9Cpxm"],"license":"MIT"},"node_modules/@latticexyz/world/src/modules/core/types.sol":{"keccak256":"0x256b3269e1e7eb6c8b6e26432bbe6799b4d45a88ef1b0e795ea71e604cec3a8a","urls":["bzz-raw://99bf6320ce9671ed74e7352b4e6c462d741ca9a894c48b526e7d8513308fa6b3","dweb:/ipfs/QmRFJcWFMDRkg7soJ4r4MrqacKmj16vUEMFEGWJuvFi4vJ"],"license":"MIT"},"node_modules/@latticexyz/world/src/requireInterface.sol":{"keccak256":"0x229777eeaac1099104e10832f59bc02f3494a5b6de8225810a3b175643d97039","urls":["bzz-raw://0bf7e4df65be1808418d8dbb1decb346ec2a3b7a11b895818ae90f319522f795","dweb:/ipfs/Qmco2UnqR9oop9ppY2Zbv1LWCQKGM99A7j6iWGsMCrwSmy"],"license":"MIT"},"node_modules/@latticexyz/world/src/revertWithBytes.sol":{"keccak256":"0x16795bdbfd7956d733df9ada1030ee7a1a714e3b9da5899149a7b07568c4af55","urls":["bzz-raw://7a71128b4989e78215d5fc57dae8c2f84c6b5e503c159178c0df6f642b8228df","dweb:/ipfs/QmNYTfBe62SdGESZ32fxME72CbAxEqk4j79jBT7655C4u7"],"license":"MIT"},"node_modules/@latticexyz/world/src/systemHookTypes.sol":{"keccak256":"0xdd201aa30700e70c35c1d4e50c375e511d798961183c8531f947c2d15969debb","urls":["bzz-raw://d9c165b1beb7c1d3f75107407c34a5b3424ec8cb322d494892bceed23323ffb9","dweb:/ipfs/QmdH8rtgJaENsMc6HodAbahKg7PiZUJwoZufnHCw3TwrBx"],"license":"MIT"},"node_modules/@latticexyz/world/src/version.sol":{"keccak256":"0x5db84611779a814a582b5559f636640e3599dba1f36b99c529a19ce73b2d2d44","urls":["bzz-raw://b06ae2f3b888ba3dc719b2d19f60deb7c3398324f636c9dad0b92706dfc08f5a","dweb:/ipfs/QmaLgppohesJhF3ZdMWwM8NHcLiv8SRSCArS4QssfG2dC1"],"license":"MIT"},"node_modules/@latticexyz/world/src/worldResourceTypes.sol":{"keccak256":"0xc7e0aa6e4746b2d0e2eace7e462adf2f03dbc7f0c880794a577bfdbce426fcc3","urls":["bzz-raw://d7538caf090fc69fff272049cfc00d0f35ae63ee700c2091b9cc4ed5709a3b45","dweb:/ipfs/QmYriK2VpsVAePPLTP6mDZkTYMT9AkgmC2C93ktjVMDaP4"],"license":"MIT"},"node_modules/@latticexyz/world/test/createCoreModule.sol":{"keccak256":"0xb0baab0e9c67c1b945a95291aed4e16cf73ed7b95bc671076fd1a7d960e043d8","urls":["bzz-raw://b603f7c656fed7e592cd598ca94ac46fab6ed31a6d951cf4661bc7f3f24166f2","dweb:/ipfs/QmeNDUPYh3yuUj6oQ19VgKYruY1kDWenNhywzWYXeuxy39"],"license":"MIT"},"node_modules/ds-test/src/test.sol":{"keccak256":"0x8758531bbac3972efcf1fa46383dbe1d276406fe527bc7abb2f236486278e83b","urls":["bzz-raw://1f64264d61506847acf8761e84aff690cebe830958eac00bac7924d8be569240","dweb:/ipfs/QmSekDJvJ82MZAmr63n7YvfLzQ7gS4NLSHPmHL3GN3rw8k"],"license":"GPL-3.0-or-later"},"node_modules/forge-std/src/Base.sol":{"keccak256":"0x4ff1a785311017d1eedb1b4737956fa383067ad34eb439abfec1d989754dde1c","urls":["bzz-raw://f553622969b9fdb930246704a4c10dfaee6b1a4468c142fa7eb9dc292a438224","dweb:/ipfs/QmcxqHnqdQsMVtgsfH9VNLmZ3g7GhgNagfq7yvNCDcCHFK"],"license":"MIT"},"node_modules/forge-std/src/StdAssertions.sol":{"keccak256":"0x1a0dee4d8b2c81e9318e87dd85ef009467ebf7dba6575530d1fce94d34dbae60","urls":["bzz-raw://ddd790c86ddde1013d1f7a552a80168eacf2e9244077f96799180644ad523a5b","dweb:/ipfs/QmYinBFt9uEVFXP9ytT9CDoNpzWieQVgLWRFRNiypMzJaL"],"license":"MIT"},"node_modules/forge-std/src/StdChains.sol":{"keccak256":"0x51e6eb138fc953fac1ac78012a39b3f16d9289ce06a222ba93bb0621768f96e6","urls":["bzz-raw://653c577e054cf578594148a07b286571d494f401b6d4a940d3ccabd47b29233d","dweb:/ipfs/QmTWDVvR4m82MGXWYY8BCaVN89TguQJSLqRgzHzrMkFHtx"],"license":"MIT"},"node_modules/forge-std/src/StdCheats.sol":{"keccak256":"0x2e1b4b99283c16efaf155f7e55ea357943cf6e61fc02aad060534349f63b6cd5","urls":["bzz-raw://d471a35903e8a367a145ca5b5955caf691c723fe1117c6dcffd928d9f8d7c95a","dweb:/ipfs/QmXGnFUGiX9APL8xit7NZQEYBoEL3wWyW1YyFoJQd2pGPe"],"license":"MIT"},"node_modules/forge-std/src/StdError.sol":{"keccak256":"0xbf477b11a42d7611696956546bcfaa29317d1166bf65e402344599c05943fc77","urls":["bzz-raw://bc2e117d1135e030862b96a6526a43feb38d396cc79857f1fb696d4eff0e5fd6","dweb:/ipfs/QmdSuQ5RrQudTLsNmWXGEeVJX8gR5U9XPm6m4dwwuQnJrj"],"license":"MIT"},"node_modules/forge-std/src/StdInvariant.sol":{"keccak256":"0xf5762db8ef95099bbe77578cd9349511ed77f4dd63ec98cc6b7cd711447830c1","urls":["bzz-raw://a6b0360806a9804eac0f7e07492b5db9c4953c521dabb9a11b17dd610d5b804c","dweb:/ipfs/QmUFozSt3W7drBRdm1cdRow61EABqSLJtkvYZXWmoHUPss"],"license":"MIT"},"node_modules/forge-std/src/StdJson.sol":{"keccak256":"0x9e2a7521190c462a0667706385f1c52a816220a9813ca8ac520fba7ba45d660b","urls":["bzz-raw://7d23017fe6570b28130a731b86179352b93a5fb5af32f11559837afc1186293c","dweb:/ipfs/QmR3p6zG5Kmcr8gKocFCSopLHfXv1AziPJbH17nKyMxwxV"],"license":"MIT"},"node_modules/forge-std/src/StdMath.sol":{"keccak256":"0xd90ad4fd8aeaeb8929964e686e769fdedd5eded3fc3815df194a0ab9f91a3fb2","urls":["bzz-raw://7919b70f636c7b805223992f28ad1ad0145d6c1385b5931a3589aface5fe6c92","dweb:/ipfs/QmY7FRaULwoGgFteF8GawjQJRfasNgpWnU2aiMsFrYpuTC"],"license":"MIT"},"node_modules/forge-std/src/StdStorage.sol":{"keccak256":"0x391a28a2e54aea51a6fb03a3a48035304ca4d24bc669ddf3d4c152c7162e514d","urls":["bzz-raw://475fd0d87ccb0fdc4418dea2babffb4adb4aafb817e61f7ef31c2303f10c6c26","dweb:/ipfs/QmQgcgtZxpkW6DRmbJszN1F8mU6zhaTZGdWWsj77yCuWN9"],"license":"MIT"},"node_modules/forge-std/src/StdStyle.sol":{"keccak256":"0x43e2a8a9b9c2574dabe74f11adf6f782df218f463540e3b5b563609fe108597d","urls":["bzz-raw://51363ca97404cf4128e1141428949768c31929e75e014b02c85e887fbbb4f1b8","dweb:/ipfs/QmVhtbQc2fU4rRmbcfBtz34mAgG4BAZBsbna1Ca4SkoPsK"],"license":"MIT"},"node_modules/forge-std/src/StdUtils.sol":{"keccak256":"0x8758c42ba9d9e46868b796e2330ac239006ede07bd438a4b36dd6f2c47d27dc1","urls":["bzz-raw://11f5752e0187b1e3631b875efdbe05d45929d05f1c1717105a9115d0a6628140","dweb:/ipfs/QmUKkx9jfsUvjyYBw45RvrW1hTFXDXi2Jv5tbHP86mnzpi"],"license":"MIT"},"node_modules/forge-std/src/Test.sol":{"keccak256":"0xf3b62c75cea11a0e8ef8e6526e5e5c74ae47a892b9bcefc0e98d76066e1ffd24","urls":["bzz-raw://a41faaf836453e02c71fc272c80b3c90a614b30c9ba636512db0d033c7b93beb","dweb:/ipfs/QmeQAreYYaxztQtFLQdHCzCPEorj9T5foSu2hQmxk7xT5x"],"license":"MIT"},"node_modules/forge-std/src/Vm.sol":{"keccak256":"0xb569d0b4398fad95f508fb854e832143edf69a897af4250f5f60fe195a2066c5","urls":["bzz-raw://84b722ada97ea7bb841cdc0fa556aa36a02ff2d380fa24f6dc0717a71c6d9c7c","dweb:/ipfs/QmfCH9Q4tvJhPM286GFsE4UCP4YncLpRu4Nwa2ZkHdRfbw"],"license":"MIT"},"node_modules/forge-std/src/console.sol":{"keccak256":"0x91d5413c2434ca58fd278b6e1e79fd98d10c83931cc2596a6038eee4daeb34ba","urls":["bzz-raw://91ccea707361e48b9b7a161fe81f496b9932bc471e9c4e4e1e9c283f2453cc70","dweb:/ipfs/QmcB66sZhQ6Kz7MUHcLE78YXRUZxoZnnxZjN6yATsbB2ec"],"license":"MIT"},"node_modules/forge-std/src/console2.sol":{"keccak256":"0x954646445d1014c3cd85c7918f5e7adeeca5ee44b68c00bafa237e597a4e35ea","urls":["bzz-raw://516fa3be52da4763147175bfba4be0aa011fadbb0c1afb01f97265bd4cee7973","dweb:/ipfs/QmdixAyMJefx7qePChgdxcBH5MxhmN7vsqPuPLx3CgrVmF"],"license":"MIT"},"node_modules/forge-std/src/interfaces/IMulticall3.sol":{"keccak256":"0x7aac1389150499a922d1f9ef5749c908cef127cb2075b92fa17e9cb611263d0a","urls":["bzz-raw://d95ebb7c7c463e08ebc12dab639945752fb2480acfc6e86da32f72732a7fd0c0","dweb:/ipfs/QmNXK8P8oPWwajsQHvAHw3JPyQidPLCGQN3hWu1Lk6PBL2"],"license":"MIT"},"node_modules/forge-std/src/safeconsole.sol":{"keccak256":"0xbaf41fdc6c54297e7cd8250e48b0f20eaac918e342a1028cef3f9a52ac086381","urls":["bzz-raw://a500ad81dea226f9910e6b50f99a9ff930105e393a692cbfb2185e4cdb4424ae","dweb:/ipfs/QmVbUQpXNMmMWRiy4FvBNczzq46BMGfUoBikvSHNiCxVTq"],"license":"MIT"},"src/modules/puppet/Puppet.sol":{"keccak256":"0x8933512836ec527a90f1fd44cf01870b302cd5f080d1dc9f64ea11c41e46d2ab","urls":["bzz-raw://854b7887821c26da985de13e8fb476bd8bd52c411284793789d19d34d9112f3b","dweb:/ipfs/QmcHweSL5z6Mwro4dm4sLnzy7WmzdZud5yW7KQ36mnZTYD"],"license":"MIT"},"src/modules/puppet/PuppetDelegationControl.sol":{"keccak256":"0x8ba3488fee9e5503fa77b39609cfa2eed78be87636ada50e99094b0edc5a79e0","urls":["bzz-raw://08214be4e0315011bb8c675c955f560865687d9129be342ab420bbb5d123f37b","dweb:/ipfs/QmXFbsptKuD6fxKhhb7FatDBRE4seDnmefNB2WG6MEHHmW"],"license":"MIT"},"src/modules/puppet/PuppetFactorySystem.sol":{"keccak256":"0x47fc8ab186eba9b965c8cde4ff814eb9973302cbe1de6ee96f4539b62278fd85","urls":["bzz-raw://04eb1f7b3d964cefef88285546dbcbdc4f1c4e03d2364d37cdda5c79f9d9bb5a","dweb:/ipfs/QmddEmBYqWtnd63FCZgnHz2ukk1ZFTwLv2bMkVYwsXTG5t"],"license":"MIT"},"src/modules/puppet/PuppetMaster.sol":{"keccak256":"0x7f94270573d344a1aea188e3920acab0f6c3befe9e7f27a1759df091f73db9e5","urls":["bzz-raw://fc35076fb222a6e77a6968ef62856db69c4bb757f83f9849fe6abd8bb983002f","dweb:/ipfs/QmVKRXYS1Xj1ckMZg6i9XPp8LbE4BXR8GL2XBfiFvnPnk9"],"license":"MIT"},"src/modules/puppet/PuppetModule.sol":{"keccak256":"0xc6a2f90c24976f7b3b6f342329bae302323549755b079e00a11266898e6f69a0","urls":["bzz-raw://cd239b381ccb9b9387899f99f75d59e09d60020be65fe26dd7248309ae2597c5","dweb:/ipfs/QmZVXo43p1Rao1H9eMdKuskkJQfiCUduDewrNRGuQREBHp"],"license":"MIT"},"src/modules/puppet/constants.sol":{"keccak256":"0x4196c01a6d6777b1387d69d7a310d54db2547edf747c07e8c6915752a27ea5ae","urls":["bzz-raw://caf1b2b5df00f8896c29d6c105c19077a05e30ad1f61e950b445b38b77940a9a","dweb:/ipfs/QmRohpQjvkoKn3WZvqERwwt29oTTBNggeX9nqoKtfqA6aS"],"license":"MIT"},"src/modules/puppet/createPuppet.sol":{"keccak256":"0x3ec80fa8b953772490089a2ec073109f4e06bdcb12ddc4f6501384340f64232e","urls":["bzz-raw://93ecfe683e78efc41c21ed5be647cb4654ccdbf38f8ef4358067f87b39dc997c","dweb:/ipfs/QmTrt6U6BnykBBJqVmHQkgAxEcqZ6X5LHDQZgWVGVPR1X3"],"license":"MIT"},"src/modules/puppet/tables/PuppetRegistry.sol":{"keccak256":"0x26a6b1d36848665d09088daddc07b702d7eabed616742f2de658b84f049a30f3","urls":["bzz-raw://346f11ae7dfe0e9b13452e6e3fcd107e60a692528a7c5512b719c05277904448","dweb:/ipfs/QmPT212GVCD9j8ZLLG49Ueq719a8TGynJ2fPsfjjGyuYSu"],"license":"MIT"},"src/utils/AccessControlLib.sol":{"keccak256":"0xb31878bda3f249c941719f6aa743bc739701418ed3effd2b5e6b4f28219e3f88","urls":["bzz-raw://a56bea3221f0663c35375beea4803b0d4ebc7e004828b89ef72c0cfec8e009e0","dweb:/ipfs/QmPNZig8c2ou4uZFMjotG1CGT3ZcTU2aCt3C2RTSLkx3w8"],"license":"MIT"},"test/PuppetModule.t.sol":{"keccak256":"0x51a81a0d009fd6eb4d77c75a03788be0ef413bd114a1ede5f766b9161e3145b2","urls":["bzz-raw://b3797e7482f2354a76d1a76a2db4842d865cbdd3eb31a009e35abed1bf62b4e6","dweb:/ipfs/QmaTd6h5cXkMeGurBppUEgo7m36F58eJ2XfEu7RtrGjhmk"],"license":"MIT"}},"version":1},"ast":{"absolutePath":"test/PuppetModule.t.sol","id":134255,"exportedSymbols":{"DELEGATION_CONTROL_INTERFACE_ID":[22169],"GasReporter":[226],"IBaseWorld":[24400],"IWorldErrors":[22430],"PUPPET_DELEGATION":[119469],"Puppet":[119055],"PuppetDelegationControl":[119095],"PuppetMaster":[119219],"PuppetModule":[119414],"PuppetModuleTest":[134254],"PuppetTestSystem":[134005],"RESOURCE_SYSTEM":[37052],"ResourceId":[2782],"System":[22601],"Systems":[33812],"Test":[58812],"World":[23730],"WorldResourceIdInstance":[24272],"WorldResourceIdLib":[24145],"createCoreModule":[46913],"createPuppet":[119572]},"nodeType":"SourceUnit","src":"32:3589:198","nodes":[{"id":133930,"nodeType":"PragmaDirective","src":"32:25:198","nodes":[],"literals":["solidity",">=","0.8",".21"]},{"id":133932,"nodeType":"ImportDirective","src":"59:42:198","nodes":[],"absolutePath":"node_modules/forge-std/src/Test.sol","file":"forge-std/Test.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":58813,"symbolAliases":[{"foreign":{"id":133931,"name":"Test","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58812,"src":"68:4:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133934,"nodeType":"ImportDirective","src":"102:73:198","nodes":[],"absolutePath":"node_modules/@latticexyz/gas-report/src/GasReporter.sol","file":"@latticexyz/gas-report/src/GasReporter.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":227,"symbolAliases":[{"foreign":{"id":133933,"name":"GasReporter","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":226,"src":"111:11:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133936,"nodeType":"ImportDirective","src":"177:56:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/World.sol","file":"@latticexyz/world/src/World.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":23731,"symbolAliases":[{"foreign":{"id":133935,"name":"World","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23730,"src":"186:5:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133940,"nodeType":"ImportDirective","src":"234:116:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/WorldResourceId.sol","file":"@latticexyz/world/src/WorldResourceId.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":24273,"symbolAliases":[{"foreign":{"id":133937,"name":"ResourceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2782,"src":"243:10:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":133938,"name":"WorldResourceIdLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24145,"src":"255:18:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":133939,"name":"WorldResourceIdInstance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24272,"src":"275:23:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133942,"nodeType":"ImportDirective","src":"351:58:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/System.sol","file":"@latticexyz/world/src/System.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":22602,"symbolAliases":[{"foreign":{"id":133941,"name":"System","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22601,"src":"360:6:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133944,"nodeType":"ImportDirective","src":"410:79:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/worldResourceTypes.sol","file":"@latticexyz/world/src/worldResourceTypes.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":37059,"symbolAliases":[{"foreign":{"id":133943,"name":"RESOURCE_SYSTEM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"419:15:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133946,"nodeType":"ImportDirective","src":"491:85:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol","file":"@latticexyz/world/src/codegen/interfaces/IBaseWorld.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":24401,"symbolAliases":[{"foreign":{"id":133945,"name":"IBaseWorld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24400,"src":"500:10:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133948,"nodeType":"ImportDirective","src":"577:70:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/IWorldErrors.sol","file":"@latticexyz/world/src/IWorldErrors.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":22431,"symbolAliases":[{"foreign":{"id":133947,"name":"IWorldErrors","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22430,"src":"586:12:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133950,"nodeType":"ImportDirective","src":"648:95:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/IDelegationControl.sol","file":"@latticexyz/world/src/IDelegationControl.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":22186,"symbolAliases":[{"foreign":{"id":133949,"name":"DELEGATION_CONTROL_INTERFACE_ID","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":22169,"src":"657:31:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133952,"nodeType":"ImportDirective","src":"745:79:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/test/createCoreModule.sol","file":"@latticexyz/world/test/createCoreModule.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":46914,"symbolAliases":[{"foreign":{"id":133951,"name":"createCoreModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46913,"src":"754:16:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133954,"nodeType":"ImportDirective","src":"825:75:198","nodes":[],"absolutePath":"node_modules/@latticexyz/world/src/codegen/tables/Systems.sol","file":"@latticexyz/world/src/codegen/tables/Systems.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":33823,"symbolAliases":[{"foreign":{"id":133953,"name":"Systems","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":33812,"src":"834:7:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133956,"nodeType":"ImportDirective","src":"902:70:198","nodes":[],"absolutePath":"src/modules/puppet/PuppetModule.sol","file":"../src/modules/puppet/PuppetModule.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":119415,"symbolAliases":[{"foreign":{"id":133955,"name":"PuppetModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119414,"src":"911:12:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133958,"nodeType":"ImportDirective","src":"973:92:198","nodes":[],"absolutePath":"src/modules/puppet/PuppetDelegationControl.sol","file":"../src/modules/puppet/PuppetDelegationControl.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":119096,"symbolAliases":[{"foreign":{"id":133957,"name":"PuppetDelegationControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119095,"src":"982:23:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133960,"nodeType":"ImportDirective","src":"1066:58:198","nodes":[],"absolutePath":"src/modules/puppet/Puppet.sol","file":"../src/modules/puppet/Puppet.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":119056,"symbolAliases":[{"foreign":{"id":133959,"name":"Puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119055,"src":"1075:6:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133962,"nodeType":"ImportDirective","src":"1125:70:198","nodes":[],"absolutePath":"src/modules/puppet/PuppetMaster.sol","file":"../src/modules/puppet/PuppetMaster.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":119220,"symbolAliases":[{"foreign":{"id":133961,"name":"PuppetMaster","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119219,"src":"1134:12:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133964,"nodeType":"ImportDirective","src":"1196:72:198","nodes":[],"absolutePath":"src/modules/puppet/constants.sol","file":"../src/modules/puppet/constants.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":119506,"symbolAliases":[{"foreign":{"id":133963,"name":"PUPPET_DELEGATION","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119469,"src":"1205:17:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":133966,"nodeType":"ImportDirective","src":"1269:70:198","nodes":[],"absolutePath":"src/modules/puppet/createPuppet.sol","file":"../src/modules/puppet/createPuppet.sol","nameLocation":"-1:-1:-1","scope":134255,"sourceUnit":119573,"symbolAliases":[{"foreign":{"id":133965,"name":"createPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119572,"src":"1278:12:198","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":134005,"nodeType":"ContractDefinition","src":"1341:328:198","nodes":[{"id":133974,"nodeType":"EventDefinition","src":"1395:28:198","nodes":[],"anonymous":false,"eventSelector":"e762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d","name":"Hello","nameLocation":"1401:5:198","parameters":{"id":133973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133972,"indexed":false,"mutability":"mutable","name":"message","nameLocation":"1414:7:198","nodeType":"VariableDeclaration","scope":133974,"src":"1407:14:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":133971,"name":"string","nodeType":"ElementaryTypeName","src":"1407:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1406:16:198"}},{"id":133995,"nodeType":"FunctionDefinition","src":"1427:155:198","nodes":[],"body":{"id":133994,"nodeType":"Block","src":"1502:80:198","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":133984,"name":"Hello","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133974,"src":"1521:5:198","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":133985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1527:8:198","memberName":"selector","nodeType":"MemberAccess","src":"1521:14:198","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[{"id":133988,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133976,"src":"1548:7:198","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":133986,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"1537:3:198","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":133987,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"1541:6:198","memberName":"encode","nodeType":"MemberAccess","src":"1537:10:198","typeDescriptions":{"typeIdentifier":"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":133989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1537:19:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":133981,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119218,"src":"1508:6:198","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_contract$_Puppet_$119055_$","typeString":"function () view returns (contract Puppet)"}},"id":133982,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:8:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_Puppet_$119055","typeString":"contract Puppet"}},"id":133983,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1517:3:198","memberName":"log","nodeType":"MemberAccess","referencedDeclaration":119006,"src":"1508:12:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (bytes32,bytes memory) external"}},"id":133990,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1508:49:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":133991,"nodeType":"ExpressionStatement","src":"1508:49:198"},{"expression":{"id":133992,"name":"message","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":133976,"src":"1570:7:198","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":133980,"id":133993,"nodeType":"Return","src":"1563:14:198"}]},"functionSelector":"319585fb","implemented":true,"kind":"function","modifiers":[],"name":"echoAndEmit","nameLocation":"1436:11:198","parameters":{"id":133977,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133976,"mutability":"mutable","name":"message","nameLocation":"1462:7:198","nodeType":"VariableDeclaration","scope":133995,"src":"1448:21:198","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":133975,"name":"string","nodeType":"ElementaryTypeName","src":"1448:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1447:23:198"},"returnParameters":{"id":133980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133979,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":133995,"src":"1487:13:198","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":133978,"name":"string","nodeType":"ElementaryTypeName","src":"1487:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1486:15:198"},"scope":134005,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134004,"nodeType":"FunctionDefinition","src":"1586:81:198","nodes":[],"body":{"id":134003,"nodeType":"Block","src":"1637:30:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134000,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":23760,"src":"1650:10:198","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":134001,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1650:12:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":133999,"id":134002,"nodeType":"Return","src":"1643:19:198"}]},"functionSelector":"d737d0c7","implemented":true,"kind":"function","modifiers":[],"name":"msgSender","nameLocation":"1595:9:198","parameters":{"id":133996,"nodeType":"ParameterList","parameters":[],"src":"1604:2:198"},"returnParameters":{"id":133999,"nodeType":"ParameterList","parameters":[{"constant":false,"id":133998,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":134004,"src":"1628:7:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":133997,"name":"address","nodeType":"ElementaryTypeName","src":"1628:7:198","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1627:9:198"},"scope":134005,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":133967,"name":"System","nameLocations":["1370:6:198"],"nodeType":"IdentifierPath","referencedDeclaration":22601,"src":"1370:6:198"},"id":133968,"nodeType":"InheritanceSpecifier","src":"1370:6:198"},{"baseName":{"id":133969,"name":"PuppetMaster","nameLocations":["1378:12:198"],"nodeType":"IdentifierPath","referencedDeclaration":119219,"src":"1378:12:198"},"id":133970,"nodeType":"InheritanceSpecifier","src":"1378:12:198"}],"canonicalName":"PuppetTestSystem","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[134005,119219,22601,23800,22336,22203],"name":"PuppetTestSystem","nameLocation":"1350:16:198","scope":134255,"usedErrors":[119173],"usedEvents":[133974]},{"id":134254,"nodeType":"ContractDefinition","src":"1671:1949:198","nodes":[{"id":134013,"nodeType":"UsingForDirective","src":"1722:45:198","nodes":[],"global":false,"libraryName":{"id":134010,"name":"WorldResourceIdInstance","nameLocations":["1728:23:198"],"nodeType":"IdentifierPath","referencedDeclaration":24272,"src":"1728:23:198"},"typeName":{"id":134012,"nodeType":"UserDefinedTypeName","pathNode":{"id":134011,"name":"ResourceId","nameLocations":["1756:10:198"],"nodeType":"IdentifierPath","referencedDeclaration":2782,"src":"1756:10:198"},"referencedDeclaration":2782,"src":"1756:10:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}},{"id":134017,"nodeType":"EventDefinition","src":"1771:24:198","nodes":[],"anonymous":false,"eventSelector":"e762c7c6ad44bf64dd9f998228fe1bf5218e470864dcfff5544c541c5b6c649d","name":"Hello","nameLocation":"1777:5:198","parameters":{"id":134016,"nodeType":"ParameterList","parameters":[{"constant":false,"id":134015,"indexed":false,"mutability":"mutable","name":"msg","nameLocation":"1790:3:198","nodeType":"VariableDeclaration","scope":134017,"src":"1783:10:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134014,"name":"string","nodeType":"ElementaryTypeName","src":"1783:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1782:12:198"}},{"id":134020,"nodeType":"VariableDeclaration","src":"1799:24:198","nodes":[],"constant":false,"mutability":"mutable","name":"world","nameLocation":"1818:5:198","scope":134254,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"},"typeName":{"id":134019,"nodeType":"UserDefinedTypeName","pathNode":{"id":134018,"name":"IBaseWorld","nameLocations":["1799:10:198"],"nodeType":"IdentifierPath","referencedDeclaration":24400,"src":"1799:10:198"},"referencedDeclaration":24400,"src":"1799:10:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"visibility":"private"},{"id":134029,"nodeType":"VariableDeclaration","src":"1827:132:198","nodes":[],"constant":false,"mutability":"mutable","name":"systemId","nameLocation":"1846:8:198","scope":134254,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"},"typeName":{"id":134022,"nodeType":"UserDefinedTypeName","pathNode":{"id":134021,"name":"ResourceId","nameLocations":["1827:10:198"],"nodeType":"IdentifierPath","referencedDeclaration":2782,"src":"1827:10:198"},"referencedDeclaration":2782,"src":"1827:10:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},"value":{"arguments":[{"id":134025,"name":"RESOURCE_SYSTEM","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":37052,"src":"1897:15:198","typeDescriptions":{"typeIdentifier":"t_bytes2","typeString":"bytes2"}},{"hexValue":"6e616d657370616365","id":134026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1925:11:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_300f800aee223ec4f0f7f13ec0e9fb1b8a8186bbfdb275780ce6218872155189","typeString":"literal_string \"namespace\""},"value":"namespace"},{"hexValue":"7465737453797374656d","id":134027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1944:12:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_8d96422d2b097e05a277285f0fc83c2e15de737c7943b8faa9a1568e10dd25b0","typeString":"literal_string \"testSystem\""},"value":"testSystem"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes2","typeString":"bytes2"},{"typeIdentifier":"t_stringliteral_300f800aee223ec4f0f7f13ec0e9fb1b8a8186bbfdb275780ce6218872155189","typeString":"literal_string \"namespace\""},{"typeIdentifier":"t_stringliteral_8d96422d2b097e05a277285f0fc83c2e15de737c7943b8faa9a1568e10dd25b0","typeString":"literal_string \"testSystem\""}],"expression":{"id":134023,"name":"WorldResourceIdLib","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24145,"src":"1861:18:198","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_WorldResourceIdLib_$24145_$","typeString":"type(library WorldResourceIdLib)"}},"id":134024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1880:6:198","memberName":"encode","nodeType":"MemberAccess","referencedDeclaration":24073,"src":"1861:25:198","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes2_$_t_bytes14_$_t_bytes16_$returns$_t_userDefinedValueType$_ResourceId_$2782_$","typeString":"function (bytes2,bytes14,bytes16) pure returns (ResourceId)"}},"id":134028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":["1889:6:198","1914:9:198","1938:4:198"],"names":["typeId","namespace","name"],"nodeType":"FunctionCall","src":"1861:98:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},"visibility":"private"},{"id":134032,"nodeType":"VariableDeclaration","src":"1963:31:198","nodes":[],"constant":false,"mutability":"mutable","name":"puppet","nameLocation":"1988:6:198","scope":134254,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"},"typeName":{"id":134031,"nodeType":"UserDefinedTypeName","pathNode":{"id":134030,"name":"PuppetTestSystem","nameLocations":["1963:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134005,"src":"1963:16:198"},"referencedDeclaration":134005,"src":"1963:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"visibility":"private"},{"id":134055,"nodeType":"FunctionDefinition","src":"1999:117:198","nodes":[],"body":{"id":134054,"nodeType":"Block","src":"2023:93:198","nodes":[],"statements":[{"expression":{"id":134045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":134035,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2029:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":134041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2056:9:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_World_$23730_$","typeString":"function () returns (contract World)"},"typeName":{"id":134040,"nodeType":"UserDefinedTypeName","pathNode":{"id":134039,"name":"World","nameLocations":["2060:5:198"],"nodeType":"IdentifierPath","referencedDeclaration":23730,"src":"2060:5:198"},"referencedDeclaration":23730,"src":"2060:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_World_$23730","typeString":"contract World"}}},"id":134042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2056:11:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_World_$23730","typeString":"contract World"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_World_$23730","typeString":"contract World"}],"id":134038,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2048:7:198","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":134037,"name":"address","nodeType":"ElementaryTypeName","src":"2048:7:198","typeDescriptions":{}}},"id":134043,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2048:20:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":134036,"name":"IBaseWorld","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24400,"src":"2037:10:198","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IBaseWorld_$24400_$","typeString":"type(contract IBaseWorld)"}},"id":134044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2037:32:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"src":"2029:40:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134046,"nodeType":"ExpressionStatement","src":"2029:40:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":134050,"name":"createCoreModule","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46913,"src":"2092:16:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$_t_contract$_CoreModule_$35431_$","typeString":"function () returns (contract CoreModule)"}},"id":134051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2092:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_CoreModule_$35431","typeString":"contract CoreModule"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_CoreModule_$35431","typeString":"contract CoreModule"}],"expression":{"id":134047,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2075:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134049,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2081:10:198","memberName":"initialize","nodeType":"MemberAccess","referencedDeclaration":22506,"src":"2075:16:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IModule_$22254_$returns$__$","typeString":"function (contract IModule) external"}},"id":134052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2075:36:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134053,"nodeType":"ExpressionStatement","src":"2075:36:198"}]},"functionSelector":"0a9254e4","implemented":true,"kind":"function","modifiers":[],"name":"setUp","nameLocation":"2008:5:198","parameters":{"id":134033,"nodeType":"ParameterList","parameters":[],"src":"2013:2:198"},"returnParameters":{"id":134034,"nodeType":"ParameterList","parameters":[],"src":"2023:0:198"},"scope":134254,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134105,"nodeType":"FunctionDefinition","src":"2120:390:198","nodes":[],"body":{"id":134104,"nodeType":"Block","src":"2153:357:198","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":134063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2179:16:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_PuppetModule_$119414_$","typeString":"function () returns (contract PuppetModule)"},"typeName":{"id":134062,"nodeType":"UserDefinedTypeName","pathNode":{"id":134061,"name":"PuppetModule","nameLocations":["2183:12:198"],"nodeType":"IdentifierPath","referencedDeclaration":119414,"src":"2183:12:198"},"referencedDeclaration":119414,"src":"2183:12:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"}}},"id":134064,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2179:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"}},{"arguments":[{"hexValue":"30","id":134067,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2209:1:198","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":134066,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2199:9:198","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":134065,"name":"bytes","nodeType":"ElementaryTypeName","src":"2203:5:198","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":134068,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2199:12:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":134058,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2159:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2165:13:198","memberName":"installModule","nodeType":"MemberAccess","referencedDeclaration":24444,"src":"2159:19:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IModule_$22254_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IModule,bytes memory) external"}},"id":134069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2159:53:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134070,"nodeType":"ExpressionStatement","src":"2159:53:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":134074,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134029,"src":"2286:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},"id":134075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2295:14:198","memberName":"getNamespaceId","nodeType":"MemberAccess","referencedDeclaration":24191,"src":"2286:23:198","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ResourceId_$2782_$returns$_t_userDefinedValueType$_ResourceId_$2782_$attached_to$_t_userDefinedValueType$_ResourceId_$2782_$","typeString":"function (ResourceId) pure returns (ResourceId)"}},"id":134076,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2286:25:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}],"expression":{"id":134071,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2262:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134073,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2268:17:198","memberName":"registerNamespace","nodeType":"MemberAccess","referencedDeclaration":24460,"src":"2262:23:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_userDefinedValueType$_ResourceId_$2782_$returns$__$","typeString":"function (ResourceId) external"}},"id":134077,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2262:50:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134078,"nodeType":"ExpressionStatement","src":"2262:50:198"},{"assignments":[134081],"declarations":[{"constant":false,"id":134081,"mutability":"mutable","name":"system","nameLocation":"2335:6:198","nodeType":"VariableDeclaration","scope":134104,"src":"2318:23:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"},"typeName":{"id":134080,"nodeType":"UserDefinedTypeName","pathNode":{"id":134079,"name":"PuppetTestSystem","nameLocations":["2318:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134005,"src":"2318:16:198"},"referencedDeclaration":134005,"src":"2318:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"visibility":"internal"}],"id":134086,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":134084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2344:20:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_PuppetTestSystem_$134005_$","typeString":"function () returns (contract PuppetTestSystem)"},"typeName":{"id":134083,"nodeType":"UserDefinedTypeName","pathNode":{"id":134082,"name":"PuppetTestSystem","nameLocations":["2348:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134005,"src":"2348:16:198"},"referencedDeclaration":134005,"src":"2348:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}}},"id":134085,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2344:22:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"nodeType":"VariableDeclarationStatement","src":"2318:48:198"},{"expression":{"arguments":[{"id":134090,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134029,"src":"2393:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},{"id":134091,"name":"system","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134081,"src":"2403:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},{"hexValue":"74727565","id":134092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2411:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"},{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":134087,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2372:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134089,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2378:14:198","memberName":"registerSystem","nodeType":"MemberAccess","referencedDeclaration":24491,"src":"2372:20:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_userDefinedValueType$_ResourceId_$2782_$_t_contract$_WorldContextConsumer_$23800_$_t_bool_$returns$__$","typeString":"function (ResourceId,contract WorldContextConsumer,bool) external"}},"id":134093,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2372:44:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134094,"nodeType":"ExpressionStatement","src":"2372:44:198"},{"expression":{"id":134102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":134095,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134032,"src":"2449:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":134098,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2488:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},{"id":134099,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134029,"src":"2495:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"},{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}],"id":134097,"name":"createPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119572,"src":"2475:12:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBaseWorld_$24400_$_t_userDefinedValueType$_ResourceId_$2782_$returns$_t_address_$","typeString":"function (contract IBaseWorld,ResourceId) returns (address)"}},"id":134100,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2475:29:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":134096,"name":"PuppetTestSystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134005,"src":"2458:16:198","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PuppetTestSystem_$134005_$","typeString":"type(contract PuppetTestSystem)"}},"id":134101,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2458:47:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"src":"2449:56:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"id":134103,"nodeType":"ExpressionStatement","src":"2449:56:198"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setupPuppet","nameLocation":"2129:12:198","parameters":{"id":134056,"nodeType":"ParameterList","parameters":[],"src":"2141:2:198"},"returnParameters":{"id":134057,"nodeType":"ParameterList","parameters":[],"src":"2153:0:198"},"scope":134254,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":134155,"nodeType":"FunctionDefinition","src":"2514:384:198","nodes":[],"body":{"id":134154,"nodeType":"Block","src":"2551:347:198","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":134113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2581:16:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_PuppetModule_$119414_$","typeString":"function () returns (contract PuppetModule)"},"typeName":{"id":134112,"nodeType":"UserDefinedTypeName","pathNode":{"id":134111,"name":"PuppetModule","nameLocations":["2585:12:198"],"nodeType":"IdentifierPath","referencedDeclaration":119414,"src":"2585:12:198"},"referencedDeclaration":119414,"src":"2585:12:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"}}},"id":134114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2581:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"}},{"arguments":[{"hexValue":"30","id":134117,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2611:1:198","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":134116,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2601:9:198","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":134115,"name":"bytes","nodeType":"ElementaryTypeName","src":"2605:5:198","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":134118,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2601:12:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PuppetModule_$119414","typeString":"contract PuppetModule"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":134108,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2557:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134110,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2563:17:198","memberName":"installRootModule","nodeType":"MemberAccess","referencedDeclaration":22448,"src":"2557:23:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_contract$_IModule_$22254_$_t_bytes_memory_ptr_$returns$__$","typeString":"function (contract IModule,bytes memory) external"}},"id":134119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2557:57:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134120,"nodeType":"ExpressionStatement","src":"2557:57:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":134124,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134029,"src":"2674:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},"id":134125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2683:14:198","memberName":"getNamespaceId","nodeType":"MemberAccess","referencedDeclaration":24191,"src":"2674:23:198","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_userDefinedValueType$_ResourceId_$2782_$returns$_t_userDefinedValueType$_ResourceId_$2782_$attached_to$_t_userDefinedValueType$_ResourceId_$2782_$","typeString":"function (ResourceId) pure returns (ResourceId)"}},"id":134126,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2674:25:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}],"expression":{"id":134121,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2650:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2656:17:198","memberName":"registerNamespace","nodeType":"MemberAccess","referencedDeclaration":24460,"src":"2650:23:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_userDefinedValueType$_ResourceId_$2782_$returns$__$","typeString":"function (ResourceId) external"}},"id":134127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2650:50:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134128,"nodeType":"ExpressionStatement","src":"2650:50:198"},{"assignments":[134131],"declarations":[{"constant":false,"id":134131,"mutability":"mutable","name":"system","nameLocation":"2723:6:198","nodeType":"VariableDeclaration","scope":134154,"src":"2706:23:198","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"},"typeName":{"id":134130,"nodeType":"UserDefinedTypeName","pathNode":{"id":134129,"name":"PuppetTestSystem","nameLocations":["2706:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134005,"src":"2706:16:198"},"referencedDeclaration":134005,"src":"2706:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"visibility":"internal"}],"id":134136,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":134134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"NewExpression","src":"2732:20:198","typeDescriptions":{"typeIdentifier":"t_function_creation_nonpayable$__$returns$_t_contract$_PuppetTestSystem_$134005_$","typeString":"function () returns (contract PuppetTestSystem)"},"typeName":{"id":134133,"nodeType":"UserDefinedTypeName","pathNode":{"id":134132,"name":"PuppetTestSystem","nameLocations":["2736:16:198"],"nodeType":"IdentifierPath","referencedDeclaration":134005,"src":"2736:16:198"},"referencedDeclaration":134005,"src":"2736:16:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}}},"id":134135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2732:22:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"nodeType":"VariableDeclarationStatement","src":"2706:48:198"},{"expression":{"arguments":[{"id":134140,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134029,"src":"2781:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}},{"id":134141,"name":"system","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134131,"src":"2791:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},{"hexValue":"74727565","id":134142,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2799:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"},{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":134137,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2760:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},"id":134139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2766:14:198","memberName":"registerSystem","nodeType":"MemberAccess","referencedDeclaration":24491,"src":"2760:20:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_userDefinedValueType$_ResourceId_$2782_$_t_contract$_WorldContextConsumer_$23800_$_t_bool_$returns$__$","typeString":"function (ResourceId,contract WorldContextConsumer,bool) external"}},"id":134143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2760:44:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134144,"nodeType":"ExpressionStatement","src":"2760:44:198"},{"expression":{"id":134152,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":134145,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134032,"src":"2837:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"id":134148,"name":"world","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134020,"src":"2876:5:198","typeDescriptions":{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"}},{"id":134149,"name":"systemId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134029,"src":"2883:8:198","typeDescriptions":{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IBaseWorld_$24400","typeString":"contract IBaseWorld"},{"typeIdentifier":"t_userDefinedValueType$_ResourceId_$2782","typeString":"ResourceId"}],"id":134147,"name":"createPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":119572,"src":"2863:12:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_contract$_IBaseWorld_$24400_$_t_userDefinedValueType$_ResourceId_$2782_$returns$_t_address_$","typeString":"function (contract IBaseWorld,ResourceId) returns (address)"}},"id":134150,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2863:29:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":134146,"name":"PuppetTestSystem","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134005,"src":"2846:16:198","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_PuppetTestSystem_$134005_$","typeString":"type(contract PuppetTestSystem)"}},"id":134151,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2846:47:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"src":"2837:56:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"id":134153,"nodeType":"ExpressionStatement","src":"2837:56:198"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setupRootPuppet","nameLocation":"2523:16:198","parameters":{"id":134106,"nodeType":"ParameterList","parameters":[],"src":"2539:2:198"},"returnParameters":{"id":134107,"nodeType":"ParameterList","parameters":[],"src":"2551:0:198"},"scope":134254,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":134187,"nodeType":"FunctionDefinition","src":"2902:234:198","nodes":[],"body":{"id":134186,"nodeType":"Block","src":"2937:199:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134158,"name":"_setupPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134105,"src":"2943:12:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":134159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2943:14:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134160,"nodeType":"ExpressionStatement","src":"2943:14:198"},{"expression":{"arguments":[{"hexValue":"74727565","id":134164,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2978:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2984:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134166,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2990:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2996:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":134161,"name":"vm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49264,"src":"2964:2:198","typeDescriptions":{"typeIdentifier":"t_contract$_Vm_$60339","typeString":"contract Vm"}},"id":134163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2967:10:198","memberName":"expectEmit","nodeType":"MemberAccess","referencedDeclaration":60020,"src":"2964:13:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$returns$__$","typeString":"function (bool,bool,bool,bool) external"}},"id":134168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2964:37:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134169,"nodeType":"ExpressionStatement","src":"2964:37:198"},{"eventCall":{"arguments":[{"hexValue":"68656c6c6f20776f726c64","id":134171,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3018:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"id":134170,"name":"Hello","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134017,"src":"3012:5:198","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":134172,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3012:20:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134173,"nodeType":"EmitStatement","src":"3007:25:198"},{"assignments":[134175],"declarations":[{"constant":false,"id":134175,"mutability":"mutable","name":"result","nameLocation":"3052:6:198","nodeType":"VariableDeclaration","scope":134186,"src":"3038:20:198","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134174,"name":"string","nodeType":"ElementaryTypeName","src":"3038:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":134180,"initialValue":{"arguments":[{"hexValue":"68656c6c6f20776f726c64","id":134178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3080:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"expression":{"id":134176,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134032,"src":"3061:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"id":134177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3068:11:198","memberName":"echoAndEmit","nodeType":"MemberAccess","referencedDeclaration":133995,"src":"3061:18:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$returns$_t_string_memory_ptr_$","typeString":"function (string memory) external returns (string memory)"}},"id":134179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3061:33:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"3038:56:198"},{"expression":{"arguments":[{"id":134182,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134175,"src":"3109:6:198","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"68656c6c6f20776f726c64","id":134183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3117:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"id":134181,"name":"assertEq","nodeType":"Identifier","overloadedDeclarations":[49399,49424,49437,49453,49495,49537,49579,49616,49653,49690,47234,47259,47289,47314,47373,47398,47428,47453,48926,48961],"referencedDeclaration":48926,"src":"3100:8:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":134184,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3100:31:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134185,"nodeType":"ExpressionStatement","src":"3100:31:198"}]},"functionSelector":"f60736ce","implemented":true,"kind":"function","modifiers":[],"name":"testEmitOnPuppet","nameLocation":"2911:16:198","parameters":{"id":134156,"nodeType":"ParameterList","parameters":[],"src":"2927:2:198"},"returnParameters":{"id":134157,"nodeType":"ParameterList","parameters":[],"src":"2937:0:198"},"scope":134254,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134204,"nodeType":"FunctionDefinition","src":"3140:107:198","nodes":[],"body":{"id":134203,"nodeType":"Block","src":"3172:75:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134190,"name":"_setupPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134105,"src":"3178:12:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":134191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3178:14:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134192,"nodeType":"ExpressionStatement","src":"3178:14:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":134194,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134032,"src":"3208:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"id":134195,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3215:9:198","memberName":"msgSender","nodeType":"MemberAccess","referencedDeclaration":134004,"src":"3208:16:198","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":134196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3208:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":134199,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3236:4:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModuleTest_$134254","typeString":"contract PuppetModuleTest"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PuppetModuleTest_$134254","typeString":"contract PuppetModuleTest"}],"id":134198,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3228:7:198","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":134197,"name":"address","nodeType":"ElementaryTypeName","src":"3228:7:198","typeDescriptions":{}}},"id":134200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3228:13:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":134193,"name":"assertEq","nodeType":"Identifier","overloadedDeclarations":[49399,49424,49437,49453,49495,49537,49579,49616,49653,49690,47234,47259,47289,47314,47373,47398,47428,47453,48926,48961],"referencedDeclaration":47234,"src":"3199:8:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":134201,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3199:43:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134202,"nodeType":"ExpressionStatement","src":"3199:43:198"}]},"functionSelector":"d81bebb9","implemented":true,"kind":"function","modifiers":[],"name":"testMsgSender","nameLocation":"3149:13:198","parameters":{"id":134188,"nodeType":"ParameterList","parameters":[],"src":"3162:2:198"},"returnParameters":{"id":134189,"nodeType":"ParameterList","parameters":[],"src":"3172:0:198"},"scope":134254,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134236,"nodeType":"FunctionDefinition","src":"3251:242:198","nodes":[],"body":{"id":134235,"nodeType":"Block","src":"3290:203:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134207,"name":"_setupRootPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134155,"src":"3296:16:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":134208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3296:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134209,"nodeType":"ExpressionStatement","src":"3296:18:198"},{"expression":{"arguments":[{"hexValue":"74727565","id":134213,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3335:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134214,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3341:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3347:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},{"hexValue":"74727565","id":134216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3353:4:198","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bool","typeString":"bool"}],"expression":{"id":134210,"name":"vm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49264,"src":"3321:2:198","typeDescriptions":{"typeIdentifier":"t_contract$_Vm_$60339","typeString":"contract Vm"}},"id":134212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3324:10:198","memberName":"expectEmit","nodeType":"MemberAccess","referencedDeclaration":60020,"src":"3321:13:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_bool_$_t_bool_$_t_bool_$_t_bool_$returns$__$","typeString":"function (bool,bool,bool,bool) external"}},"id":134217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3321:37:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134218,"nodeType":"ExpressionStatement","src":"3321:37:198"},{"eventCall":{"arguments":[{"hexValue":"68656c6c6f20776f726c64","id":134220,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3375:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"id":134219,"name":"Hello","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134017,"src":"3369:5:198","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory)"}},"id":134221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3369:20:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134222,"nodeType":"EmitStatement","src":"3364:25:198"},{"assignments":[134224],"declarations":[{"constant":false,"id":134224,"mutability":"mutable","name":"result","nameLocation":"3409:6:198","nodeType":"VariableDeclaration","scope":134235,"src":"3395:20:198","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":134223,"name":"string","nodeType":"ElementaryTypeName","src":"3395:6:198","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":134229,"initialValue":{"arguments":[{"hexValue":"68656c6c6f20776f726c64","id":134227,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3437:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"expression":{"id":134225,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134032,"src":"3418:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"id":134226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3425:11:198","memberName":"echoAndEmit","nodeType":"MemberAccess","referencedDeclaration":133995,"src":"3418:18:198","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_string_memory_ptr_$returns$_t_string_memory_ptr_$","typeString":"function (string memory) external returns (string memory)"}},"id":134228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3418:33:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"3395:56:198"},{"expression":{"arguments":[{"id":134231,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134224,"src":"3466:6:198","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"68656c6c6f20776f726c64","id":134232,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3474:13:198","typeDescriptions":{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""},"value":"hello world"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"},{"typeIdentifier":"t_stringliteral_47173285a8d7341e5e972fc677286384f802f8ef42a5ec5f03bbfa254cb01fad","typeString":"literal_string \"hello world\""}],"id":134230,"name":"assertEq","nodeType":"Identifier","overloadedDeclarations":[49399,49424,49437,49453,49495,49537,49579,49616,49653,49690,47234,47259,47289,47314,47373,47398,47428,47453,48926,48961],"referencedDeclaration":48926,"src":"3457:8:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":134233,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3457:31:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134234,"nodeType":"ExpressionStatement","src":"3457:31:198"}]},"functionSelector":"3ae50144","implemented":true,"kind":"function","modifiers":[],"name":"testEmitOnRootPuppet","nameLocation":"3260:20:198","parameters":{"id":134205,"nodeType":"ParameterList","parameters":[],"src":"3280:2:198"},"returnParameters":{"id":134206,"nodeType":"ParameterList","parameters":[],"src":"3290:0:198"},"scope":134254,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":134253,"nodeType":"FunctionDefinition","src":"3497:121:198","nodes":[],"body":{"id":134252,"nodeType":"Block","src":"3539:79:198","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":134239,"name":"_setupRootPuppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134155,"src":"3545:16:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":134240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3545:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134241,"nodeType":"ExpressionStatement","src":"3545:18:198"},{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":134243,"name":"puppet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":134032,"src":"3579:6:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetTestSystem_$134005","typeString":"contract PuppetTestSystem"}},"id":134244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3586:9:198","memberName":"msgSender","nodeType":"MemberAccess","referencedDeclaration":134004,"src":"3579:16:198","typeDescriptions":{"typeIdentifier":"t_function_external_view$__$returns$_t_address_$","typeString":"function () view external returns (address)"}},"id":134245,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3579:18:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":134248,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3607:4:198","typeDescriptions":{"typeIdentifier":"t_contract$_PuppetModuleTest_$134254","typeString":"contract PuppetModuleTest"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PuppetModuleTest_$134254","typeString":"contract PuppetModuleTest"}],"id":134247,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3599:7:198","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":134246,"name":"address","nodeType":"ElementaryTypeName","src":"3599:7:198","typeDescriptions":{}}},"id":134249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3599:13:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":134242,"name":"assertEq","nodeType":"Identifier","overloadedDeclarations":[49399,49424,49437,49453,49495,49537,49579,49616,49653,49690,47234,47259,47289,47314,47373,47398,47428,47453,48926,48961],"referencedDeclaration":47234,"src":"3570:8:198","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":134250,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3570:43:198","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":134251,"nodeType":"ExpressionStatement","src":"3570:43:198"}]},"functionSelector":"06e28a34","implemented":true,"kind":"function","modifiers":[],"name":"testMsgSenderRootPuppet","nameLocation":"3506:23:198","parameters":{"id":134237,"nodeType":"ParameterList","parameters":[],"src":"3529:2:198"},"returnParameters":{"id":134238,"nodeType":"ParameterList","parameters":[],"src":"3539:0:198"},"scope":134254,"stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":134006,"name":"Test","nameLocations":["1700:4:198"],"nodeType":"IdentifierPath","referencedDeclaration":58812,"src":"1700:4:198"},"id":134007,"nodeType":"InheritanceSpecifier","src":"1700:4:198"},{"baseName":{"id":134008,"name":"GasReporter","nameLocations":["1706:11:198"],"nodeType":"IdentifierPath","referencedDeclaration":226,"src":"1706:11:198"},"id":134009,"nodeType":"InheritanceSpecifier","src":"1706:11:198"}],"canonicalName":"PuppetModuleTest","contractDependencies":[23730,35431,35451,35650,35830,36019,119414,134005],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[134254,226,58812,49271,49268,58761,54499,54209,53445,51391,50698,49205],"name":"PuppetModuleTest","nameLocation":"1680:16:198","scope":134255,"usedErrors":[],"usedEvents":[46919,46923,46927,46931,46935,46939,46943,46947,46953,46959,46967,46975,46981,46987,46993,46999,49293,49298,49303,49310,49317,49324,134017]}],"license":"MIT"},"id":198}