diff --git a/backend/contract-addresses.json b/backend/contract-addresses.json index f3e468c..ed5d238 100644 --- a/backend/contract-addresses.json +++ b/backend/contract-addresses.json @@ -1,9 +1,11 @@ { "localhost": { - "DAO": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", - "Work1": "0xfe58B9EB03F75A603de1B286584f5E9532ab8fB5", - "Onboarding": "0x1d63FDe5B461106729fE1e5e38A02fc68C518Af5", - "Proposals": "0x050C420Cc4995B41217Eba1B54B82Fd5687e9139" + "DAO": "0x431c73b38B9eBe4a30C7A0ffa11188fa9429Bf38", + "Work1": "0x0173903444ed92F5e30f522d0f274162c57b4Cc0", + "Onboarding": "0x44df3b45C937c88267999a5f69D9BFBe83dEf447", + "Proposals": "0x663f119ffb7eD161A00C89c25046Afe8B40fff52", + "Rollup": "0xB61bB0defB5A0B59F0BAeBF2F4345d7c317c20B4", + "Work2": "0x4774670f82A590e7eD6072bd7098836B06FFd8ce" }, "sepolia": { "DAO": "0x8e5bd58B2ca8910C5F9be8de847d6883B15c60d2", diff --git a/backend/contractArtifacts/DAO.json b/backend/contractArtifacts/DAO.json index c9d6490..d6cd706 100644 --- a/backend/contractArtifacts/DAO.json +++ b/backend/contractArtifacts/DAO.json @@ -211,7 +211,7 @@ }, { "internalType": "string", - "name": "contentId", + "name": "postId", "type": "string" }, { @@ -364,6 +364,29 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "forwardAllowance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -820,8 +843,8 @@ "type": "function" } ], - "bytecode": "0x60806040526003600c556040518060400160405280600160ff168152602001600a60ff16815250600f90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b615f3980620004b96000396000f3fe60806040526004361061014b5760003560e01c806370a08231116100b6578063a23362791161006f578063a2336279146104e7578063a9059cbb1461052f578063da66863a1461056c578063dd62ed3e146105a9578063e5b4d827146105e6578063f8300fca1461060f5761014b565b806370a08231146103ac57806388380274146103e957806395d89b4114610426578063975762b3146104515780639fbe7c731461047a578063a230c524146104aa5761014b565b806323b872dd1161010857806323b872dd146102765780632d17c062146102b3578063313ce567146102dc57806350cde8ef146103075780635daf08ca14610344578063642b5bfb146103815761014b565b806306fdde0314610150578063095ea7b31461017b57806311aee380146101b857806317906c2e146101e357806317c182171461020e57806318160ddd1461024b575b600080fd5b34801561015c57600080fd5b5061016561064e565b6040516101729190613b5e565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190613c28565b6106e0565b6040516101af9190613c83565b60405180910390f35b3480156101c457600080fd5b506101cd610703565b6040516101da9190613cad565b60405180910390f35b3480156101ef57600080fd5b506101f8610709565b6040516102059190613cad565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613cc8565b61070f565b6040516102429190613c83565b60405180910390f35b34801561025757600080fd5b506102606110f1565b60405161026d9190613cad565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613cf5565b6110fb565b6040516102aa9190613c83565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613d74565b611138565b005b3480156102e857600080fd5b506102f1611161565b6040516102fe9190613de3565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613cc8565b61116a565b60405161033b9190613b5e565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613cc8565b611216565b6040516103789190613e0d565b60405180910390f35b34801561038d57600080fd5b50610396611249565b6040516103a39190613cad565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613e28565b61124f565b6040516103e09190613cad565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613e55565b611297565b60405161041d9190613c83565b60405180910390f35b34801561043257600080fd5b5061043b61131e565b6040516104489190613b5e565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613ea8565b6113b0565b005b610494600480360381019061048f9190613fec565b6113e5565b6040516104a19190613cad565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613e28565b61189f565b6040516104de9190613c83565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613cc8565b6118bf565b6040516105269c9b9a9998979695949392919061425c565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613c28565b611b39565b6040516105639190613c83565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190614326565b611b76565b6040516105a09190614460565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614482565b611c5f565b6040516105dd9190613cad565b60405180910390f35b3480156105f257600080fd5b5061060d6004803603810190610608919061456e565b611ce6565b005b34801561061b57600080fd5b5061063660048036038101906106319190614752565b6121b9565b6040516106459392919061479b565b60405180910390f35b60606003805461065d90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461068990614808565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b6000806106eb6122a1565b90506106f88185856122a9565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff1615151461077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690614885565b60405180910390fd5b600080600080600090505b84600501548110156107fb5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107db578160020154846107d491906148d4565b93506107ee565b8160020154836107eb91906148d4565b92505b808060010191505061078a565b506002846003015461080d9190614937565b8361081891906148d4565b92506002846003015461082b9190614937565b8261083691906148d4565b915060006002856003015461084b9190614968565b146108605760018361085d91906148d4565b92505b83600e015442118061088357506108756110f1565b828461088191906148d4565b145b6108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990614a0b565b60405180910390fd5b836006016001016000600281106108dc576108db614a2b565b5b01546108e66110f1565b6108f09190614a5a565b82846108fc91906148d4565b8560060160010160016002811061091657610915614a2b565b5b01546109229190614a5a565b11610a5257600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de818660008060405161097893929190614a9c565b60405180910390a183600f0160029054906101000a900460ff1615610a45578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a00959493929190614b6c565b6020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614bdb565b505b60009450505050506110ec565b83600601600301600060028110610a6c57610a6b614a2b565b5b01548284610a7a91906148d4565b610a849190614a5a565b84600601600301600160028110610a9e57610a9d614a2b565b5b015484610aab9190614a5a565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b1c93929190614a9c565b60405180910390a1600085610b315782610b33565b835b905060008060005b8760050154811015610c3b5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c2e576000606489600601600501548760020154610b959190614a5a565b610b9f9190614937565b90508860060160060160009054906101000a900460ff1615610bfd57610bea8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630836122bb565b8084610bf691906148d4565b9350610c2c565b610c2b8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124e0565b5b505b8080600101915050610b3b565b508715610e3d5760028760030154610c539190614937565b82610c5e91906148d4565b915060005b8760050154811015610d495787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cbb57508460010160009054906101000a900460ff161515891515145b15610d3c5760006064896006016005015486886002015487610cdd9190614a5a565b610ce79190614937565b610cf19190614a5a565b610cfb9190614937565b90508083610d0991906148d4565b9250610d3a308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122bb565b505b8080600101915050610c63565b5060008183610d589190614c08565b9050600060028960030154610d6d9190614968565b14610d8257600181610d7f91906148d4565b90505b610e36886001018054610d9490614808565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc090614808565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b50505050508260028b60030154610e249190614937565b610e2e91906148d4565b600080612562565b5050610f55565b866003015482610e4d91906148d4565b915060005b8760050154811015610f535787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eaa57508460010160009054906101000a900460ff161515891515145b15610f465760006064896006016005015460028b60030154610ecc9190614937565b87610ed79190614c08565b886002015487610ee79190614a5a565b610ef19190614937565b610efb9190614a5a565b610f059190614937565b90508083610f1391906148d4565b9250610f44308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122bb565b505b8080600101915050610e52565b505b60005b60065481101561101e5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fa46110f1565b610fad8361124f565b8b600d0154610fbc9190614a5a565b610fc69190614937565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561100e573d6000803e3d6000fd5b5050508080600101915050610f58565b5086600f0160029054906101000a900460ff16156110e4578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b815260040161109f959493929190614b6c565b6020604051808303816000875af11580156110be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190614bdb565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90614c88565b60405180910390fd5b6000600d6000858152602001908152602001600020905061115b8133858561310a565b50505050565b60006009905090565b6009818154811061117a57600080fd5b90600052602060002001600091509050805461119590614808565b80601f01602080910402602001604051908101604052809291908181526020018280546111c190614808565b801561120e5780601f106111e35761010080835404028352916020019161120e565b820191906000526020600020905b8154815290600101906020018083116111f157829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a43385856122a9565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016112e193929190614ca8565b600060405180830381600087803b1580156112fb57600080fd5b505af115801561130f573d6000803e3d6000fd5b50505050600190509392505050565b60606004805461132d90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461135990614808565b80156113a65780601f1061137b576101008083540402835291602001916113a6565b820191906000526020600020905b81548152906001019060200180831161138957829003601f168201915b5050505050905090565b6000600d600086815260200190815260200160002090506113d2843385613200565b6113de8185858561310a565b5050505050565b6000803411611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090614d51565b60405180910390fd5b600189101561146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614dbd565b60405180910390fd5b651cae8c13e0008911156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90614e29565b60405180910390fd5b876001600281106114ca576114c9614a2b565b5b6020020135600f6000600281106114e4576114e3614a2b565b5b01546114f09190614a5a565b8860006002811061150457611503614a2b565b5b6020020135600f60016002811061151e5761151d614a2b565b5b015461152a9190614a5a565b101561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290614e95565b60405180910390fd5b8760016002811061157f5761157e614a2b565b5b60200201358860006002811061159857611597614a2b565b5b602002013511156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590614f01565b60405180910390fd5b866001600281106115f2576115f1614a2b565b5b60200201358760006002811061160b5761160a614a2b565b5b60200201351115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890614f6d565b60405180910390fd5b6064861115611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90614fd9565b60405180910390fd5b600060088c8c6040516116a9929190615029565b908152602001604051809103902090506000816002018054905003611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061508e565b60405180910390fd5b600e6000815480929190611716906150ae565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c8260010191826117899291906152ad565b503481600d018190555089816006016001019060026117a9929190613a71565b5088816006016003019060026117c0929190613a71565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a4261180491906148d4565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118449291906153ce565b5061184f3034613294565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118879190613cad565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090508060000154908060010180546118e890614808565b80601f016020809104026020016040519081016040528092919081815260200182805461191490614808565b80156119615780601f1061193657610100808354040283529160200191611961565b820191906000526020600020905b81548152906001019060200180831161194457829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156119ee576020028201915b8154815260200190600101908083116119da575b5050505050815260200160038201600280602002604051908101604052809291908260028015611a33576020028201915b815481526020019060010190808311611a1f575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ab690614808565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae290614808565b8015611b2f5780601f10611b0457610100808354040283529160200191611b2f565b820191906000526020600020905b815481529060010190602001808311611b1257829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614c88565b60405180910390fd5b6060600060088484604051611b8c929190615029565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611c525783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611bc0565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390615510565b60405180910390fd5b600a6000815480929190611d3f906150ae565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611d819291906152ad565b50600060088585604051611d96929190615029565b908152602001604051809103902090506000816002018054905014611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de7906155a2565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611e469291906152ad565b50600080600090505b88889050811015611ee557888882818110611e6d57611e6c614a2b565b5b9050604002016000013582611e8291906148d4565b915082600201898983818110611e9b57611e9a614a2b565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611ed6919061574f565b50508080600101915050611e4f565b50620f42408114611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f22906157cf565b60405180910390fd5b60005b84849050811015611fa65782600301858583818110611f5057611f4f614a2b565b5b9050602002810190611f6291906157fe565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f979190615965565b50508080600101915050611f2e565b5060008060005b84600301805490508110156120ca576000856003018281548110611fd457611fd3614a2b565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc081121561204b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612042906159e5565b60405180910390fd5b620f4240811315612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208890615a77565b60405180910390fd5b60008113156120ad5780846120a69190615a97565b93506120bc565b80836120b99190615a97565b92505b508080600101915050611fad565b50620f4240821315612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890615b4d565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b90615bdf565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af24972788886040516121a5929190615c2c565b60405180910390a150505050505050505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546121f290614808565b80601f016020809104026020016040519081016040528092919081815260200182805461221e90614808565b801561226b5780601f106122405761010080835404028352916020019161226b565b820191906000526020600020905b81548152906001019060200180831161224e57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b6122b68383836001613316565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361230d57806002600082825461230191906148d4565b925050819055506123e0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612399578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161239093929190614ca8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124295780600260008282540392505081905550612476565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d39190613cad565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125525760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125499190613e0d565b60405180910390fd5b61255e826000836122bb565b5050565b6000600c54821061257557839050613102565b60006008866040516125879190615c81565b9081526020016040518091039020905060008160020180549050036125af5784915050613102565b60005b81600301805490508110156126e35760008260030182815481106125d9576125d8614a2b565b5b90600052602060002090600202016000015412156126d6576126c88783600301838154811061260b5761260a614a2b565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461263e90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461266a90614808565b80156126b75780601f1061268c576101008083540402835291602001916126b7565b820191906000526020600020905b81548152906001019060200180831161269a57829003601f168201915b5050505050815250508888886134ed565b866126d39190615c98565b95505b80806001019150506125b2565b5060005b816003018054905081101561281857600082600301828154811061270e5761270d614a2b565b5b906000526020600020906002020160000154131561280b576127fd878360030183815481106127405761273f614a2b565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461277390614808565b80601f016020809104026020016040519081016040528092919081815260200182805461279f90614808565b80156127ec5780601f106127c1576101008083540402835291602001916127ec565b820191906000526020600020905b8154815290600101906020018083116127cf57829003601f168201915b5050505050815250508888886134ed565b866128089190615c98565b95505b80806001019150506126e7565b506000851315612b0457612ae3816040518060a001604052908160008201805461284190614808565b80601f016020809104026020016040519081016040528092919081815260200182805461286d90614808565b80156128ba5780601f1061288f576101008083540402835291602001916128ba565b820191906000526020600020905b81548152906001019060200180831161289d57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156129d05783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508152602001906001019061293e565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612acb578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a3a90614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6690614808565b8015612ab35780601f10612a8857610100808354040283529160200191612ab3565b820191906000526020600020905b815481529060010190602001808311612a9657829003601f168201915b505050505081525050815260200190600101906129fd565b505050508152602001600482015481525050866136b8565b5084816004016000828254612af891906148d4565b92505081905550613100565b6000858260040154612b169190615a97565b12612e0757612ddc816040518060a0016040529081600082018054612b3a90614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6690614808565b8015612bb35780601f10612b8857610100808354040283529160200191612bb3565b820191906000526020600020905b815481529060010190602001808311612b9657829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612cc95783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612c37565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612dc4578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612d3390614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5f90614808565b8015612dac5780601f10612d8157610100808354040283529160200191612dac565b820191906000526020600020905b815481529060010190602001808311612d8f57829003601f168201915b50505050508152505081526020019060010190612cf6565b505050508152602001600482015481525050866136b8565b915084612de890615cdb565b816004016000828254612dfb9190614c08565b925050819055506130ff565b848160040154612e179190615a97565b91506130e7816040518060a0016040529081600082018054612e3890614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612e6490614808565b8015612eb15780601f10612e8657610100808354040283529160200191612eb1565b820191906000526020600020905b815481529060010190602001808311612e9457829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612fc75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612f35565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156130c257838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461303190614808565b80601f016020809104026020016040519081016040528092919081815260200182805461305d90614808565b80156130aa5780601f1061307f576101008083540402835291602001916130aa565b820191906000526020600020905b81548152906001019060200180831161308d57829003601f168201915b50505050508152505081526020019060010190612ff4565b50505050815260200160048201548152505082600401546130e290615cdb565b6136b8565b826130f29190615a97565b9150600081600401819055505b5b505b949350505050565b83600e0154421115613151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314890615d6f565b60405180910390fd5b6000846005016000815480929190613168906150ae565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600061320c8484611c5f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461328e578181101561327e578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161327593929190614ca8565b60405180910390fd5b61328d84848484036000613316565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133065760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016132fd9190613e0d565b60405180910390fd5b613312600083836122bb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036133885760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161337f9190613e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133fa5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016133f19190613e0d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156134e7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516134de9190613cad565b60405180910390a35b50505050565b6000620f42408560000151856135039190615d8f565b61350d9190615e07565b905060008560200151510361356f576000811215613560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355790615ee3565b60405180910390fd5b61356a30826124e0565b6136af565b6000600b876040516135819190615c81565b908152602001604051809103902086602001516040516135a19190615c81565b9081526020016040518091039020549050831561360e5760008212156135e957806135cb90615cdb565b82136135e057806135db90615cdb565b6135e2565b815b915061360d565b806135f390615cdb565b8212613608578061360390615cdb565b61360a565b815b91505b5b600061364787602001518487806136355750600087148015613634575060008a60000151125b5b60018861364291906148d4565b612562565b905080836136559190615c98565b925082600b896040516136689190615c81565b908152602001604051809103902088602001516040516136889190615c81565b908152602001604051809103902060008282546136a59190615a97565b9250508190555050505b95945050505050565b60008060005b846040015151811015613812576000856040015182815181106136e4576136e3614a2b565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138045780600560006006600081548092919061375b906150ae565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806001019150506136be565b5060005b846040015151811015613a695760008560400151828151811061383c5761383b614a2b565b5b602002602001015190506000600187604001515161385a9190614c08565b83101561389457620f42408260000151876138759190615d8f565b61387f9190615e07565b9050808461388d9190615a97565b93506138a3565b83866138a09190615c98565b90505b60008113156139de576138bb308360200151836122bb565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139d9578160200151600560006006600081548092919061392c906150ae565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613a5a565b806139e890615cdb565b6139f5836020015161124f565b1015613a4057613a08826020015161124f565b81613a139190615a97565b85613a1e9190615a97565b9450613a3b826020015130613a36856020015161124f565b6122bb565b613a59565b613a5882602001513083613a5390615cdb565b6122bb565b5b5b50508080600101915050613816565b505092915050565b8260028101928215613aa0579160200282015b82811115613a9f578235825591602001919060010190613a84565b5b509050613aad9190613ab1565b5090565b5b80821115613aca576000816000905550600101613ab2565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b08578082015181840152602081019050613aed565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b3082613ace565b613b3a8185613ad9565b9350613b4a818560208601613aea565b613b5381613b14565b840191505092915050565b60006020820190508181036000830152613b788184613b25565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bbf82613b94565b9050919050565b613bcf81613bb4565b8114613bda57600080fd5b50565b600081359050613bec81613bc6565b92915050565b6000819050919050565b613c0581613bf2565b8114613c1057600080fd5b50565b600081359050613c2281613bfc565b92915050565b60008060408385031215613c3f57613c3e613b8a565b5b6000613c4d85828601613bdd565b9250506020613c5e85828601613c13565b9150509250929050565b60008115159050919050565b613c7d81613c68565b82525050565b6000602082019050613c986000830184613c74565b92915050565b613ca781613bf2565b82525050565b6000602082019050613cc26000830184613c9e565b92915050565b600060208284031215613cde57613cdd613b8a565b5b6000613cec84828501613c13565b91505092915050565b600080600060608486031215613d0e57613d0d613b8a565b5b6000613d1c86828701613bdd565b9350506020613d2d86828701613bdd565b9250506040613d3e86828701613c13565b9150509250925092565b613d5181613c68565b8114613d5c57600080fd5b50565b600081359050613d6e81613d48565b92915050565b600080600060608486031215613d8d57613d8c613b8a565b5b6000613d9b86828701613c13565b9350506020613dac86828701613c13565b9250506040613dbd86828701613d5f565b9150509250925092565b600060ff82169050919050565b613ddd81613dc7565b82525050565b6000602082019050613df86000830184613dd4565b92915050565b613e0781613bb4565b82525050565b6000602082019050613e226000830184613dfe565b92915050565b600060208284031215613e3e57613e3d613b8a565b5b6000613e4c84828501613bdd565b91505092915050565b600080600060608486031215613e6e57613e6d613b8a565b5b6000613e7c86828701613bdd565b9350506020613e8d86828701613c13565b9250506040613e9e86828701613c13565b9150509250925092565b60008060008060808587031215613ec257613ec1613b8a565b5b6000613ed087828801613c13565b9450506020613ee187828801613bdd565b9350506040613ef287828801613c13565b9250506060613f0387828801613d5f565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613f3457613f33613f0f565b5b8235905067ffffffffffffffff811115613f5157613f50613f14565b5b602083019150836001820283011115613f6d57613f6c613f19565b5b9250929050565b600081905082602060020282011115613f9057613f8f613f19565b5b92915050565b60008083601f840112613fac57613fab613f0f565b5b8235905067ffffffffffffffff811115613fc957613fc8613f14565b5b602083019150836001820283011115613fe557613fe4613f19565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140105761400f613b8a565b5b60008b013567ffffffffffffffff81111561402e5761402d613b8f565b5b61403a8d828e01613f1e565b9a509a5050602061404d8d828e01613c13565b985050604061405e8d828e01613f74565b975050608061406f8d828e01613f74565b96505060c06140808d828e01613c13565b95505060e06140918d828e01613d5f565b9450506101006140a38d828e01613d5f565b9350506101208b013567ffffffffffffffff8111156140c5576140c4613b8f565b5b6140d18d828e01613f96565b92509250509295989b9194979a5092959850565b6140ee81613bf2565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061412083836140e5565b60208301905092915050565b6000602082019050919050565b614142816140f4565b61414c81846140ff565b92506141578261410a565b8060005b8381101561418857815161416f8782614114565b965061417a8361412c565b92505060018101905061415b565b505050505050565b61419981613c68565b82525050565b60e0820160008201516141b560008501826140e5565b5060208201516141c86020850182614139565b5060408201516141db6060850182614139565b5060608201516141ee60a08501826140e5565b50608082015161420160c0850182614190565b50505050565b600081519050919050565b600082825260208201905092915050565b600061422e82614207565b6142388185614212565b9350614248818560208601613aea565b61425181613b14565b840191505092915050565b600061024082019050614272600083018f613c9e565b8181036020830152614284818e613b25565b9050614293604083018d613dfe565b6142a0606083018c613c9e565b6142ad608083018b613c9e565b6142ba60a083018a61419f565b6142c8610180830189613c9e565b6142d66101a0830188613c9e565b6142e46101c0830187613c74565b6142f26101e0830186613c74565b614300610200830185613c74565b8181036102208301526143138184614223565b90509d9c50505050505050505050505050565b6000806020838503121561433d5761433c613b8a565b5b600083013567ffffffffffffffff81111561435b5761435a613b8f565b5b61436785828601613f1e565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143a881613bb4565b82525050565b6040820160008201516143c460008501826140e5565b5060208201516143d7602085018261439f565b50505050565b60006143e983836143ae565b60408301905092915050565b6000602082019050919050565b600061440d82614373565b614417818561437e565b93506144228361438f565b8060005b8381101561445357815161443a88826143dd565b9750614445836143f5565b925050600181019050614426565b5085935050505092915050565b6000602082019050818103600083015261447a8184614402565b905092915050565b6000806040838503121561449957614498613b8a565b5b60006144a785828601613bdd565b92505060206144b885828601613bdd565b9150509250929050565b60008083601f8401126144d8576144d7613f0f565b5b8235905067ffffffffffffffff8111156144f5576144f4613f14565b5b60208301915083604082028301111561451157614510613f19565b5b9250929050565b60008083601f84011261452e5761452d613f0f565b5b8235905067ffffffffffffffff81111561454b5761454a613f14565b5b60208301915083602082028301111561456757614566613f19565b5b9250929050565b6000806000806000806060878903121561458b5761458a613b8a565b5b600087013567ffffffffffffffff8111156145a9576145a8613b8f565b5b6145b589828a016144c2565b9650965050602087013567ffffffffffffffff8111156145d8576145d7613b8f565b5b6145e489828a01613f1e565b9450945050604087013567ffffffffffffffff81111561460757614606613b8f565b5b61461389828a01614518565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61465f82613b14565b810181811067ffffffffffffffff8211171561467e5761467d614627565b5b80604052505050565b6000614691613b80565b905061469d8282614656565b919050565b600067ffffffffffffffff8211156146bd576146bc614627565b5b6146c682613b14565b9050602081019050919050565b82818337600083830152505050565b60006146f56146f0846146a2565b614687565b90508281526020810184848401111561471157614710614622565b5b61471c8482856146d3565b509392505050565b600082601f83011261473957614738613f0f565b5b81356147498482602086016146e2565b91505092915050565b60006020828403121561476857614767613b8a565b5b600082013567ffffffffffffffff81111561478657614785613b8f565b5b61479284828501614724565b91505092915050565b600060608201905081810360008301526147b58186613b25565b90506147c46020830185613dfe565b6147d16040830184613c9e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482057607f821691505b602082108103614833576148326147d9565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061486f601883613ad9565b915061487a82614839565b602082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148df82613bf2565b91506148ea83613bf2565b9250828201905080821115614902576149016148a5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061494282613bf2565b915061494d83613bf2565b92508261495d5761495c614908565b5b828204905092915050565b600061497382613bf2565b915061497e83613bf2565b92508261498e5761498d614908565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f5602183613ad9565b9150614a0082614999565b604082019050919050565b60006020820190508181036000830152614a24816149e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a6582613bf2565b9150614a7083613bf2565b9250828202614a7e81613bf2565b91508282048414831517614a9557614a946148a5565b5b5092915050565b6000606082019050614ab16000830186613c9e565b614abe6020830185613c74565b614acb6040830184613c74565b949350505050565b60008190508160005260206000209050919050565b60008154614af581614808565b614aff8186614212565b94506001821660008114614b1a5760018114614b3057614b63565b60ff198316865281151560200286019350614b63565b614b3985614ad3565b60005b83811015614b5b57815481890152600182019150602081019050614b3c565b808801955050505b50505092915050565b600060a082019050614b816000830188613c74565b614b8e6020830187613c74565b614b9b6040830186613c9e565b614ba86060830185613c9e565b8181036080830152614bba8184614ae8565b90509695505050505050565b600081519050614bd581613bfc565b92915050565b600060208284031215614bf157614bf0613b8a565b5b6000614bff84828501614bc6565b91505092915050565b6000614c1382613bf2565b9150614c1e83613bf2565b9250828203905081811115614c3657614c356148a5565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614c72601b83613ad9565b9150614c7d82614c3c565b602082019050919050565b60006020820190508181036000830152614ca181614c65565b9050919050565b6000606082019050614cbd6000830186613dfe565b614cca6020830185613c9e565b614cd76040830184613c9e565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614d3b602b83613ad9565b9150614d4682614cdf565b604082019050919050565b60006020820190508181036000830152614d6a81614d2e565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614da7601583613ad9565b9150614db282614d71565b602082019050919050565b60006020820190508181036000830152614dd681614d9a565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614e13601483613ad9565b9150614e1e82614ddd565b602082019050919050565b60006020820190508181036000830152614e4281614e06565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614e7f601783613ad9565b9150614e8a82614e49565b602082019050919050565b60006020820190508181036000830152614eae81614e72565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614eeb601a83613ad9565b9150614ef682614eb5565b602082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614f57601d83613ad9565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614fc3601e83613ad9565b9150614fce82614f8d565b602082019050919050565b60006020820190508181036000830152614ff281614fb6565b9050919050565b600081905092915050565b60006150108385614ff9565b935061501d8385846146d3565b82840190509392505050565b6000615036828486615004565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000615078601583613ad9565b915061508382615042565b602082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b60006150b982613bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150eb576150ea6148a5565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615126565b61516d8683615126565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151aa6151a56151a084613bf2565b615185565b613bf2565b9050919050565b6000819050919050565b6151c48361518f565b6151d86151d0826151b1565b848454615133565b825550505050565b600090565b6151ed6151e0565b6151f88184846151bb565b505050565b5b8181101561521c576152116000826151e5565b6001810190506151fe565b5050565b601f8211156152615761523281615101565b61523b84615116565b8101602085101561524a578190505b61525e61525685615116565b8301826151fd565b50505b505050565b600082821c905092915050565b600061528460001984600802615266565b1980831691505092915050565b600061529d8383615273565b9150826002028217905092915050565b6152b783836150f6565b67ffffffffffffffff8111156152d0576152cf614627565b5b6152da8254614808565b6152e5828285615220565b6000601f8311600181146153145760008415615302578287013590505b61530c8582615291565b865550615374565b601f19841661532286615101565b60005b8281101561534a57848901358255600182019150602085019450602081019050615325565b868310156153675784890135615363601f891682615273565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f8211156153c95761539a81614ad3565b6153a384615116565b810160208510156153b2578190505b6153c66153be85615116565b8301826151fd565b50505b505050565b6153d8838361537d565b67ffffffffffffffff8111156153f1576153f0614627565b5b6153fb8254614808565b615406828285615388565b6000601f8311600181146154355760008415615423578287013590505b61542d8582615291565b865550615495565b601f19841661544386614ad3565b60005b8281101561546b57848901358255600182019150602085019450602081019050615446565b868310156154885784890135615484601f891682615273565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b60006154fa602583613ad9565b91506155058261549e565b604082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b600061558c602983613ad9565b915061559782615530565b604082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b600081356155cf81613bfc565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615611846155d8565b9350801983169250808416831791505092915050565b6156308261518f565b61564361563c826151b1565b83546155e5565b8255505050565b6000813561565781613bc6565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff615680846155d8565b9350801983169250808416831791505092915050565b60006156b16156ac6156a784613b94565b615185565b613b94565b9050919050565b60006156c382615696565b9050919050565b60006156d5826156b8565b9050919050565b6000819050919050565b6156ef826156ca565b6157026156fb826156dc565b8354615660565b8255505050565b60008101600083018061571b816155c2565b90506157278184615627565b50505060018101602083018061573c8161564a565b905061574881846156e6565b5050505050565b6157598282615709565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006157b9602283613ad9565b91506157c48261575d565b604082019050919050565b600060208201905081810360008301526157e8816157ac565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261581a576158196157ef565b5b80830191505092915050565b6000819050919050565b61583981615826565b811461584457600080fd5b50565b6000813561585481615830565b80915050919050565b600061587861587361586e84615826565b615185565b615826565b9050919050565b6000819050919050565b6158928261585d565b6158a561589e8261587f565b83546155e5565b8255505050565b600080833560016020038436030381126158c9576158c86157ef565b5b80840192508235915067ffffffffffffffff8211156158eb576158ea6157f4565b5b602083019250600182023603831315615907576159066157f9565b5b509250929050565b61591a8383836152ad565b505050565b60008101600083018061593181615847565b905061593d8184615889565b505050600181016020830161595281856158ac565b61595d81838661590f565b505050505050565b61596f828261591f565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b60006159cf602883613ad9565b91506159da82615973565b604082019050919050565b600060208201905081810360008301526159fe816159c2565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615a61602783613ad9565b9150615a6c82615a05565b604082019050919050565b60006020820190508181036000830152615a9081615a54565b9050919050565b6000615aa282615826565b9150615aad83615826565b925082820190508281121560008312168382126000841215161715615ad557615ad46148a5565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615b37602c83613ad9565b9150615b4282615adb565b604082019050919050565b60006020820190508181036000830152615b6681615b2a565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615bc9602d83613ad9565b9150615bd482615b6d565b604082019050919050565b60006020820190508181036000830152615bf881615bbc565b9050919050565b6000615c0b8385613ad9565b9350615c188385846146d3565b615c2183613b14565b840190509392505050565b60006020820190508181036000830152615c47818486615bff565b90509392505050565b6000615c5b82613ace565b615c658185614ff9565b9350615c75818560208601613aea565b80840191505092915050565b6000615c8d8284615c50565b915081905092915050565b6000615ca382615826565b9150615cae83615826565b9250828203905081811260008412168282136000851215161715615cd557615cd46148a5565b5b92915050565b6000615ce682615826565b91507f80000000000000000000000000000000000000000000000000000000000000008203615d1857615d176148a5565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615d59601883613ad9565b9150615d6482615d23565b602082019050919050565b60006020820190508181036000830152615d8881615d4c565b9050919050565b6000615d9a82615826565b9150615da583615826565b9250828202615db381615826565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615deb57615dea6148a5565b5b8282058414831517615e0057615dff6148a5565b5b5092915050565b6000615e1282615826565b9150615e1d83615826565b925082615e2d57615e2c614908565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615e6657615e656148a5565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615ecd602683613ad9565b9150615ed882615e71565b604082019050919050565b60006020820190508181036000830152615efc81615ec0565b905091905056fea264697066735822122014513cb1a0064db5c9629f88dfa2833b84407c3037a2b10d20a5061ea1aa744664736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061014b5760003560e01c806370a08231116100b6578063a23362791161006f578063a2336279146104e7578063a9059cbb1461052f578063da66863a1461056c578063dd62ed3e146105a9578063e5b4d827146105e6578063f8300fca1461060f5761014b565b806370a08231146103ac57806388380274146103e957806395d89b4114610426578063975762b3146104515780639fbe7c731461047a578063a230c524146104aa5761014b565b806323b872dd1161010857806323b872dd146102765780632d17c062146102b3578063313ce567146102dc57806350cde8ef146103075780635daf08ca14610344578063642b5bfb146103815761014b565b806306fdde0314610150578063095ea7b31461017b57806311aee380146101b857806317906c2e146101e357806317c182171461020e57806318160ddd1461024b575b600080fd5b34801561015c57600080fd5b5061016561064e565b6040516101729190613b5e565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190613c28565b6106e0565b6040516101af9190613c83565b60405180910390f35b3480156101c457600080fd5b506101cd610703565b6040516101da9190613cad565b60405180910390f35b3480156101ef57600080fd5b506101f8610709565b6040516102059190613cad565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613cc8565b61070f565b6040516102429190613c83565b60405180910390f35b34801561025757600080fd5b506102606110f1565b60405161026d9190613cad565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613cf5565b6110fb565b6040516102aa9190613c83565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613d74565b611138565b005b3480156102e857600080fd5b506102f1611161565b6040516102fe9190613de3565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613cc8565b61116a565b60405161033b9190613b5e565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613cc8565b611216565b6040516103789190613e0d565b60405180910390f35b34801561038d57600080fd5b50610396611249565b6040516103a39190613cad565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613e28565b61124f565b6040516103e09190613cad565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613e55565b611297565b60405161041d9190613c83565b60405180910390f35b34801561043257600080fd5b5061043b61131e565b6040516104489190613b5e565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613ea8565b6113b0565b005b610494600480360381019061048f9190613fec565b6113e5565b6040516104a19190613cad565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613e28565b61189f565b6040516104de9190613c83565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613cc8565b6118bf565b6040516105269c9b9a9998979695949392919061425c565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613c28565b611b39565b6040516105639190613c83565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190614326565b611b76565b6040516105a09190614460565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614482565b611c5f565b6040516105dd9190613cad565b60405180910390f35b3480156105f257600080fd5b5061060d6004803603810190610608919061456e565b611ce6565b005b34801561061b57600080fd5b5061063660048036038101906106319190614752565b6121b9565b6040516106459392919061479b565b60405180910390f35b60606003805461065d90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461068990614808565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b6000806106eb6122a1565b90506106f88185856122a9565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff1615151461077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690614885565b60405180910390fd5b600080600080600090505b84600501548110156107fb5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107db578160020154846107d491906148d4565b93506107ee565b8160020154836107eb91906148d4565b92505b808060010191505061078a565b506002846003015461080d9190614937565b8361081891906148d4565b92506002846003015461082b9190614937565b8261083691906148d4565b915060006002856003015461084b9190614968565b146108605760018361085d91906148d4565b92505b83600e015442118061088357506108756110f1565b828461088191906148d4565b145b6108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990614a0b565b60405180910390fd5b836006016001016000600281106108dc576108db614a2b565b5b01546108e66110f1565b6108f09190614a5a565b82846108fc91906148d4565b8560060160010160016002811061091657610915614a2b565b5b01546109229190614a5a565b11610a5257600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de818660008060405161097893929190614a9c565b60405180910390a183600f0160029054906101000a900460ff1615610a45578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a00959493929190614b6c565b6020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614bdb565b505b60009450505050506110ec565b83600601600301600060028110610a6c57610a6b614a2b565b5b01548284610a7a91906148d4565b610a849190614a5a565b84600601600301600160028110610a9e57610a9d614a2b565b5b015484610aab9190614a5a565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b1c93929190614a9c565b60405180910390a1600085610b315782610b33565b835b905060008060005b8760050154811015610c3b5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c2e576000606489600601600501548760020154610b959190614a5a565b610b9f9190614937565b90508860060160060160009054906101000a900460ff1615610bfd57610bea8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630836122bb565b8084610bf691906148d4565b9350610c2c565b610c2b8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124e0565b5b505b8080600101915050610b3b565b508715610e3d5760028760030154610c539190614937565b82610c5e91906148d4565b915060005b8760050154811015610d495787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cbb57508460010160009054906101000a900460ff161515891515145b15610d3c5760006064896006016005015486886002015487610cdd9190614a5a565b610ce79190614937565b610cf19190614a5a565b610cfb9190614937565b90508083610d0991906148d4565b9250610d3a308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122bb565b505b8080600101915050610c63565b5060008183610d589190614c08565b9050600060028960030154610d6d9190614968565b14610d8257600181610d7f91906148d4565b90505b610e36886001018054610d9490614808565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc090614808565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b50505050508260028b60030154610e249190614937565b610e2e91906148d4565b600080612562565b5050610f55565b866003015482610e4d91906148d4565b915060005b8760050154811015610f535787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eaa57508460010160009054906101000a900460ff161515891515145b15610f465760006064896006016005015460028b60030154610ecc9190614937565b87610ed79190614c08565b886002015487610ee79190614a5a565b610ef19190614937565b610efb9190614a5a565b610f059190614937565b90508083610f1391906148d4565b9250610f44308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122bb565b505b8080600101915050610e52565b505b60005b60065481101561101e5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fa46110f1565b610fad8361124f565b8b600d0154610fbc9190614a5a565b610fc69190614937565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561100e573d6000803e3d6000fd5b5050508080600101915050610f58565b5086600f0160029054906101000a900460ff16156110e4578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b815260040161109f959493929190614b6c565b6020604051808303816000875af11580156110be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190614bdb565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90614c88565b60405180910390fd5b6000600d6000858152602001908152602001600020905061115b8133858561310a565b50505050565b60006009905090565b6009818154811061117a57600080fd5b90600052602060002001600091509050805461119590614808565b80601f01602080910402602001604051908101604052809291908181526020018280546111c190614808565b801561120e5780601f106111e35761010080835404028352916020019161120e565b820191906000526020600020905b8154815290600101906020018083116111f157829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a43385856122a9565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016112e193929190614ca8565b600060405180830381600087803b1580156112fb57600080fd5b505af115801561130f573d6000803e3d6000fd5b50505050600190509392505050565b60606004805461132d90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461135990614808565b80156113a65780601f1061137b576101008083540402835291602001916113a6565b820191906000526020600020905b81548152906001019060200180831161138957829003601f168201915b5050505050905090565b6000600d600086815260200190815260200160002090506113d2843385613200565b6113de8185858561310a565b5050505050565b6000803411611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090614d51565b60405180910390fd5b600189101561146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614dbd565b60405180910390fd5b651cae8c13e0008911156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90614e29565b60405180910390fd5b876001600281106114ca576114c9614a2b565b5b6020020135600f6000600281106114e4576114e3614a2b565b5b01546114f09190614a5a565b8860006002811061150457611503614a2b565b5b6020020135600f60016002811061151e5761151d614a2b565b5b015461152a9190614a5a565b101561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290614e95565b60405180910390fd5b8760016002811061157f5761157e614a2b565b5b60200201358860006002811061159857611597614a2b565b5b602002013511156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590614f01565b60405180910390fd5b866001600281106115f2576115f1614a2b565b5b60200201358760006002811061160b5761160a614a2b565b5b60200201351115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890614f6d565b60405180910390fd5b6064861115611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90614fd9565b60405180910390fd5b600060088c8c6040516116a9929190615029565b908152602001604051809103902090506000816002018054905003611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061508e565b60405180910390fd5b600e6000815480929190611716906150ae565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c8260010191826117899291906152ad565b503481600d018190555089816006016001019060026117a9929190613a71565b5088816006016003019060026117c0929190613a71565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a4261180491906148d4565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118449291906153ce565b5061184f3034613294565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118879190613cad565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090508060000154908060010180546118e890614808565b80601f016020809104026020016040519081016040528092919081815260200182805461191490614808565b80156119615780601f1061193657610100808354040283529160200191611961565b820191906000526020600020905b81548152906001019060200180831161194457829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156119ee576020028201915b8154815260200190600101908083116119da575b5050505050815260200160038201600280602002604051908101604052809291908260028015611a33576020028201915b815481526020019060010190808311611a1f575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ab690614808565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae290614808565b8015611b2f5780601f10611b0457610100808354040283529160200191611b2f565b820191906000526020600020905b815481529060010190602001808311611b1257829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614c88565b60405180910390fd5b6060600060088484604051611b8c929190615029565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611c525783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611bc0565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390615510565b60405180910390fd5b600a6000815480929190611d3f906150ae565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611d819291906152ad565b50600060088585604051611d96929190615029565b908152602001604051809103902090506000816002018054905014611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de7906155a2565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611e469291906152ad565b50600080600090505b88889050811015611ee557888882818110611e6d57611e6c614a2b565b5b9050604002016000013582611e8291906148d4565b915082600201898983818110611e9b57611e9a614a2b565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611ed6919061574f565b50508080600101915050611e4f565b50620f42408114611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f22906157cf565b60405180910390fd5b60005b84849050811015611fa65782600301858583818110611f5057611f4f614a2b565b5b9050602002810190611f6291906157fe565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f979190615965565b50508080600101915050611f2e565b5060008060005b84600301805490508110156120ca576000856003018281548110611fd457611fd3614a2b565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc081121561204b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612042906159e5565b60405180910390fd5b620f4240811315612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208890615a77565b60405180910390fd5b60008113156120ad5780846120a69190615a97565b93506120bc565b80836120b99190615a97565b92505b508080600101915050611fad565b50620f4240821315612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890615b4d565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b90615bdf565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af24972788886040516121a5929190615c2c565b60405180910390a150505050505050505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546121f290614808565b80601f016020809104026020016040519081016040528092919081815260200182805461221e90614808565b801561226b5780601f106122405761010080835404028352916020019161226b565b820191906000526020600020905b81548152906001019060200180831161224e57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b6122b68383836001613316565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361230d57806002600082825461230191906148d4565b925050819055506123e0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612399578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161239093929190614ca8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124295780600260008282540392505081905550612476565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d39190613cad565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125525760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125499190613e0d565b60405180910390fd5b61255e826000836122bb565b5050565b6000600c54821061257557839050613102565b60006008866040516125879190615c81565b9081526020016040518091039020905060008160020180549050036125af5784915050613102565b60005b81600301805490508110156126e35760008260030182815481106125d9576125d8614a2b565b5b90600052602060002090600202016000015412156126d6576126c88783600301838154811061260b5761260a614a2b565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461263e90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461266a90614808565b80156126b75780601f1061268c576101008083540402835291602001916126b7565b820191906000526020600020905b81548152906001019060200180831161269a57829003601f168201915b5050505050815250508888886134ed565b866126d39190615c98565b95505b80806001019150506125b2565b5060005b816003018054905081101561281857600082600301828154811061270e5761270d614a2b565b5b906000526020600020906002020160000154131561280b576127fd878360030183815481106127405761273f614a2b565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461277390614808565b80601f016020809104026020016040519081016040528092919081815260200182805461279f90614808565b80156127ec5780601f106127c1576101008083540402835291602001916127ec565b820191906000526020600020905b8154815290600101906020018083116127cf57829003601f168201915b5050505050815250508888886134ed565b866128089190615c98565b95505b80806001019150506126e7565b506000851315612b0457612ae3816040518060a001604052908160008201805461284190614808565b80601f016020809104026020016040519081016040528092919081815260200182805461286d90614808565b80156128ba5780601f1061288f576101008083540402835291602001916128ba565b820191906000526020600020905b81548152906001019060200180831161289d57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156129d05783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508152602001906001019061293e565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612acb578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a3a90614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6690614808565b8015612ab35780601f10612a8857610100808354040283529160200191612ab3565b820191906000526020600020905b815481529060010190602001808311612a9657829003601f168201915b505050505081525050815260200190600101906129fd565b505050508152602001600482015481525050866136b8565b5084816004016000828254612af891906148d4565b92505081905550613100565b6000858260040154612b169190615a97565b12612e0757612ddc816040518060a0016040529081600082018054612b3a90614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6690614808565b8015612bb35780601f10612b8857610100808354040283529160200191612bb3565b820191906000526020600020905b815481529060010190602001808311612b9657829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612cc95783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612c37565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612dc4578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612d3390614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5f90614808565b8015612dac5780601f10612d8157610100808354040283529160200191612dac565b820191906000526020600020905b815481529060010190602001808311612d8f57829003601f168201915b50505050508152505081526020019060010190612cf6565b505050508152602001600482015481525050866136b8565b915084612de890615cdb565b816004016000828254612dfb9190614c08565b925050819055506130ff565b848160040154612e179190615a97565b91506130e7816040518060a0016040529081600082018054612e3890614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612e6490614808565b8015612eb15780601f10612e8657610100808354040283529160200191612eb1565b820191906000526020600020905b815481529060010190602001808311612e9457829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612fc75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612f35565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156130c257838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461303190614808565b80601f016020809104026020016040519081016040528092919081815260200182805461305d90614808565b80156130aa5780601f1061307f576101008083540402835291602001916130aa565b820191906000526020600020905b81548152906001019060200180831161308d57829003601f168201915b50505050508152505081526020019060010190612ff4565b50505050815260200160048201548152505082600401546130e290615cdb565b6136b8565b826130f29190615a97565b9150600081600401819055505b5b505b949350505050565b83600e0154421115613151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314890615d6f565b60405180910390fd5b6000846005016000815480929190613168906150ae565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600061320c8484611c5f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461328e578181101561327e578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161327593929190614ca8565b60405180910390fd5b61328d84848484036000613316565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133065760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016132fd9190613e0d565b60405180910390fd5b613312600083836122bb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036133885760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161337f9190613e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133fa5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016133f19190613e0d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156134e7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516134de9190613cad565b60405180910390a35b50505050565b6000620f42408560000151856135039190615d8f565b61350d9190615e07565b905060008560200151510361356f576000811215613560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355790615ee3565b60405180910390fd5b61356a30826124e0565b6136af565b6000600b876040516135819190615c81565b908152602001604051809103902086602001516040516135a19190615c81565b9081526020016040518091039020549050831561360e5760008212156135e957806135cb90615cdb565b82136135e057806135db90615cdb565b6135e2565b815b915061360d565b806135f390615cdb565b8212613608578061360390615cdb565b61360a565b815b91505b5b600061364787602001518487806136355750600087148015613634575060008a60000151125b5b60018861364291906148d4565b612562565b905080836136559190615c98565b925082600b896040516136689190615c81565b908152602001604051809103902088602001516040516136889190615c81565b908152602001604051809103902060008282546136a59190615a97565b9250508190555050505b95945050505050565b60008060005b846040015151811015613812576000856040015182815181106136e4576136e3614a2b565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138045780600560006006600081548092919061375b906150ae565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806001019150506136be565b5060005b846040015151811015613a695760008560400151828151811061383c5761383b614a2b565b5b602002602001015190506000600187604001515161385a9190614c08565b83101561389457620f42408260000151876138759190615d8f565b61387f9190615e07565b9050808461388d9190615a97565b93506138a3565b83866138a09190615c98565b90505b60008113156139de576138bb308360200151836122bb565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139d9578160200151600560006006600081548092919061392c906150ae565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613a5a565b806139e890615cdb565b6139f5836020015161124f565b1015613a4057613a08826020015161124f565b81613a139190615a97565b85613a1e9190615a97565b9450613a3b826020015130613a36856020015161124f565b6122bb565b613a59565b613a5882602001513083613a5390615cdb565b6122bb565b5b5b50508080600101915050613816565b505092915050565b8260028101928215613aa0579160200282015b82811115613a9f578235825591602001919060010190613a84565b5b509050613aad9190613ab1565b5090565b5b80821115613aca576000816000905550600101613ab2565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b08578082015181840152602081019050613aed565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b3082613ace565b613b3a8185613ad9565b9350613b4a818560208601613aea565b613b5381613b14565b840191505092915050565b60006020820190508181036000830152613b788184613b25565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bbf82613b94565b9050919050565b613bcf81613bb4565b8114613bda57600080fd5b50565b600081359050613bec81613bc6565b92915050565b6000819050919050565b613c0581613bf2565b8114613c1057600080fd5b50565b600081359050613c2281613bfc565b92915050565b60008060408385031215613c3f57613c3e613b8a565b5b6000613c4d85828601613bdd565b9250506020613c5e85828601613c13565b9150509250929050565b60008115159050919050565b613c7d81613c68565b82525050565b6000602082019050613c986000830184613c74565b92915050565b613ca781613bf2565b82525050565b6000602082019050613cc26000830184613c9e565b92915050565b600060208284031215613cde57613cdd613b8a565b5b6000613cec84828501613c13565b91505092915050565b600080600060608486031215613d0e57613d0d613b8a565b5b6000613d1c86828701613bdd565b9350506020613d2d86828701613bdd565b9250506040613d3e86828701613c13565b9150509250925092565b613d5181613c68565b8114613d5c57600080fd5b50565b600081359050613d6e81613d48565b92915050565b600080600060608486031215613d8d57613d8c613b8a565b5b6000613d9b86828701613c13565b9350506020613dac86828701613c13565b9250506040613dbd86828701613d5f565b9150509250925092565b600060ff82169050919050565b613ddd81613dc7565b82525050565b6000602082019050613df86000830184613dd4565b92915050565b613e0781613bb4565b82525050565b6000602082019050613e226000830184613dfe565b92915050565b600060208284031215613e3e57613e3d613b8a565b5b6000613e4c84828501613bdd565b91505092915050565b600080600060608486031215613e6e57613e6d613b8a565b5b6000613e7c86828701613bdd565b9350506020613e8d86828701613c13565b9250506040613e9e86828701613c13565b9150509250925092565b60008060008060808587031215613ec257613ec1613b8a565b5b6000613ed087828801613c13565b9450506020613ee187828801613bdd565b9350506040613ef287828801613c13565b9250506060613f0387828801613d5f565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613f3457613f33613f0f565b5b8235905067ffffffffffffffff811115613f5157613f50613f14565b5b602083019150836001820283011115613f6d57613f6c613f19565b5b9250929050565b600081905082602060020282011115613f9057613f8f613f19565b5b92915050565b60008083601f840112613fac57613fab613f0f565b5b8235905067ffffffffffffffff811115613fc957613fc8613f14565b5b602083019150836001820283011115613fe557613fe4613f19565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140105761400f613b8a565b5b60008b013567ffffffffffffffff81111561402e5761402d613b8f565b5b61403a8d828e01613f1e565b9a509a5050602061404d8d828e01613c13565b985050604061405e8d828e01613f74565b975050608061406f8d828e01613f74565b96505060c06140808d828e01613c13565b95505060e06140918d828e01613d5f565b9450506101006140a38d828e01613d5f565b9350506101208b013567ffffffffffffffff8111156140c5576140c4613b8f565b5b6140d18d828e01613f96565b92509250509295989b9194979a5092959850565b6140ee81613bf2565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061412083836140e5565b60208301905092915050565b6000602082019050919050565b614142816140f4565b61414c81846140ff565b92506141578261410a565b8060005b8381101561418857815161416f8782614114565b965061417a8361412c565b92505060018101905061415b565b505050505050565b61419981613c68565b82525050565b60e0820160008201516141b560008501826140e5565b5060208201516141c86020850182614139565b5060408201516141db6060850182614139565b5060608201516141ee60a08501826140e5565b50608082015161420160c0850182614190565b50505050565b600081519050919050565b600082825260208201905092915050565b600061422e82614207565b6142388185614212565b9350614248818560208601613aea565b61425181613b14565b840191505092915050565b600061024082019050614272600083018f613c9e565b8181036020830152614284818e613b25565b9050614293604083018d613dfe565b6142a0606083018c613c9e565b6142ad608083018b613c9e565b6142ba60a083018a61419f565b6142c8610180830189613c9e565b6142d66101a0830188613c9e565b6142e46101c0830187613c74565b6142f26101e0830186613c74565b614300610200830185613c74565b8181036102208301526143138184614223565b90509d9c50505050505050505050505050565b6000806020838503121561433d5761433c613b8a565b5b600083013567ffffffffffffffff81111561435b5761435a613b8f565b5b61436785828601613f1e565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143a881613bb4565b82525050565b6040820160008201516143c460008501826140e5565b5060208201516143d7602085018261439f565b50505050565b60006143e983836143ae565b60408301905092915050565b6000602082019050919050565b600061440d82614373565b614417818561437e565b93506144228361438f565b8060005b8381101561445357815161443a88826143dd565b9750614445836143f5565b925050600181019050614426565b5085935050505092915050565b6000602082019050818103600083015261447a8184614402565b905092915050565b6000806040838503121561449957614498613b8a565b5b60006144a785828601613bdd565b92505060206144b885828601613bdd565b9150509250929050565b60008083601f8401126144d8576144d7613f0f565b5b8235905067ffffffffffffffff8111156144f5576144f4613f14565b5b60208301915083604082028301111561451157614510613f19565b5b9250929050565b60008083601f84011261452e5761452d613f0f565b5b8235905067ffffffffffffffff81111561454b5761454a613f14565b5b60208301915083602082028301111561456757614566613f19565b5b9250929050565b6000806000806000806060878903121561458b5761458a613b8a565b5b600087013567ffffffffffffffff8111156145a9576145a8613b8f565b5b6145b589828a016144c2565b9650965050602087013567ffffffffffffffff8111156145d8576145d7613b8f565b5b6145e489828a01613f1e565b9450945050604087013567ffffffffffffffff81111561460757614606613b8f565b5b61461389828a01614518565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61465f82613b14565b810181811067ffffffffffffffff8211171561467e5761467d614627565b5b80604052505050565b6000614691613b80565b905061469d8282614656565b919050565b600067ffffffffffffffff8211156146bd576146bc614627565b5b6146c682613b14565b9050602081019050919050565b82818337600083830152505050565b60006146f56146f0846146a2565b614687565b90508281526020810184848401111561471157614710614622565b5b61471c8482856146d3565b509392505050565b600082601f83011261473957614738613f0f565b5b81356147498482602086016146e2565b91505092915050565b60006020828403121561476857614767613b8a565b5b600082013567ffffffffffffffff81111561478657614785613b8f565b5b61479284828501614724565b91505092915050565b600060608201905081810360008301526147b58186613b25565b90506147c46020830185613dfe565b6147d16040830184613c9e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482057607f821691505b602082108103614833576148326147d9565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061486f601883613ad9565b915061487a82614839565b602082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148df82613bf2565b91506148ea83613bf2565b9250828201905080821115614902576149016148a5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061494282613bf2565b915061494d83613bf2565b92508261495d5761495c614908565b5b828204905092915050565b600061497382613bf2565b915061497e83613bf2565b92508261498e5761498d614908565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f5602183613ad9565b9150614a0082614999565b604082019050919050565b60006020820190508181036000830152614a24816149e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a6582613bf2565b9150614a7083613bf2565b9250828202614a7e81613bf2565b91508282048414831517614a9557614a946148a5565b5b5092915050565b6000606082019050614ab16000830186613c9e565b614abe6020830185613c74565b614acb6040830184613c74565b949350505050565b60008190508160005260206000209050919050565b60008154614af581614808565b614aff8186614212565b94506001821660008114614b1a5760018114614b3057614b63565b60ff198316865281151560200286019350614b63565b614b3985614ad3565b60005b83811015614b5b57815481890152600182019150602081019050614b3c565b808801955050505b50505092915050565b600060a082019050614b816000830188613c74565b614b8e6020830187613c74565b614b9b6040830186613c9e565b614ba86060830185613c9e565b8181036080830152614bba8184614ae8565b90509695505050505050565b600081519050614bd581613bfc565b92915050565b600060208284031215614bf157614bf0613b8a565b5b6000614bff84828501614bc6565b91505092915050565b6000614c1382613bf2565b9150614c1e83613bf2565b9250828203905081811115614c3657614c356148a5565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614c72601b83613ad9565b9150614c7d82614c3c565b602082019050919050565b60006020820190508181036000830152614ca181614c65565b9050919050565b6000606082019050614cbd6000830186613dfe565b614cca6020830185613c9e565b614cd76040830184613c9e565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614d3b602b83613ad9565b9150614d4682614cdf565b604082019050919050565b60006020820190508181036000830152614d6a81614d2e565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614da7601583613ad9565b9150614db282614d71565b602082019050919050565b60006020820190508181036000830152614dd681614d9a565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614e13601483613ad9565b9150614e1e82614ddd565b602082019050919050565b60006020820190508181036000830152614e4281614e06565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614e7f601783613ad9565b9150614e8a82614e49565b602082019050919050565b60006020820190508181036000830152614eae81614e72565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614eeb601a83613ad9565b9150614ef682614eb5565b602082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614f57601d83613ad9565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614fc3601e83613ad9565b9150614fce82614f8d565b602082019050919050565b60006020820190508181036000830152614ff281614fb6565b9050919050565b600081905092915050565b60006150108385614ff9565b935061501d8385846146d3565b82840190509392505050565b6000615036828486615004565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000615078601583613ad9565b915061508382615042565b602082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b60006150b982613bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150eb576150ea6148a5565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615126565b61516d8683615126565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151aa6151a56151a084613bf2565b615185565b613bf2565b9050919050565b6000819050919050565b6151c48361518f565b6151d86151d0826151b1565b848454615133565b825550505050565b600090565b6151ed6151e0565b6151f88184846151bb565b505050565b5b8181101561521c576152116000826151e5565b6001810190506151fe565b5050565b601f8211156152615761523281615101565b61523b84615116565b8101602085101561524a578190505b61525e61525685615116565b8301826151fd565b50505b505050565b600082821c905092915050565b600061528460001984600802615266565b1980831691505092915050565b600061529d8383615273565b9150826002028217905092915050565b6152b783836150f6565b67ffffffffffffffff8111156152d0576152cf614627565b5b6152da8254614808565b6152e5828285615220565b6000601f8311600181146153145760008415615302578287013590505b61530c8582615291565b865550615374565b601f19841661532286615101565b60005b8281101561534a57848901358255600182019150602085019450602081019050615325565b868310156153675784890135615363601f891682615273565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f8211156153c95761539a81614ad3565b6153a384615116565b810160208510156153b2578190505b6153c66153be85615116565b8301826151fd565b50505b505050565b6153d8838361537d565b67ffffffffffffffff8111156153f1576153f0614627565b5b6153fb8254614808565b615406828285615388565b6000601f8311600181146154355760008415615423578287013590505b61542d8582615291565b865550615495565b601f19841661544386614ad3565b60005b8281101561546b57848901358255600182019150602085019450602081019050615446565b868310156154885784890135615484601f891682615273565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b60006154fa602583613ad9565b91506155058261549e565b604082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b600061558c602983613ad9565b915061559782615530565b604082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b600081356155cf81613bfc565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615611846155d8565b9350801983169250808416831791505092915050565b6156308261518f565b61564361563c826151b1565b83546155e5565b8255505050565b6000813561565781613bc6565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff615680846155d8565b9350801983169250808416831791505092915050565b60006156b16156ac6156a784613b94565b615185565b613b94565b9050919050565b60006156c382615696565b9050919050565b60006156d5826156b8565b9050919050565b6000819050919050565b6156ef826156ca565b6157026156fb826156dc565b8354615660565b8255505050565b60008101600083018061571b816155c2565b90506157278184615627565b50505060018101602083018061573c8161564a565b905061574881846156e6565b5050505050565b6157598282615709565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006157b9602283613ad9565b91506157c48261575d565b604082019050919050565b600060208201905081810360008301526157e8816157ac565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261581a576158196157ef565b5b80830191505092915050565b6000819050919050565b61583981615826565b811461584457600080fd5b50565b6000813561585481615830565b80915050919050565b600061587861587361586e84615826565b615185565b615826565b9050919050565b6000819050919050565b6158928261585d565b6158a561589e8261587f565b83546155e5565b8255505050565b600080833560016020038436030381126158c9576158c86157ef565b5b80840192508235915067ffffffffffffffff8211156158eb576158ea6157f4565b5b602083019250600182023603831315615907576159066157f9565b5b509250929050565b61591a8383836152ad565b505050565b60008101600083018061593181615847565b905061593d8184615889565b505050600181016020830161595281856158ac565b61595d81838661590f565b505050505050565b61596f828261591f565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b60006159cf602883613ad9565b91506159da82615973565b604082019050919050565b600060208201905081810360008301526159fe816159c2565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615a61602783613ad9565b9150615a6c82615a05565b604082019050919050565b60006020820190508181036000830152615a9081615a54565b9050919050565b6000615aa282615826565b9150615aad83615826565b925082820190508281121560008312168382126000841215161715615ad557615ad46148a5565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615b37602c83613ad9565b9150615b4282615adb565b604082019050919050565b60006020820190508181036000830152615b6681615b2a565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615bc9602d83613ad9565b9150615bd482615b6d565b604082019050919050565b60006020820190508181036000830152615bf881615bbc565b9050919050565b6000615c0b8385613ad9565b9350615c188385846146d3565b615c2183613b14565b840190509392505050565b60006020820190508181036000830152615c47818486615bff565b90509392505050565b6000615c5b82613ace565b615c658185614ff9565b9350615c75818560208601613aea565b80840191505092915050565b6000615c8d8284615c50565b915081905092915050565b6000615ca382615826565b9150615cae83615826565b9250828203905081811260008412168282136000851215161715615cd557615cd46148a5565b5b92915050565b6000615ce682615826565b91507f80000000000000000000000000000000000000000000000000000000000000008203615d1857615d176148a5565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615d59601883613ad9565b9150615d6482615d23565b602082019050919050565b60006020820190508181036000830152615d8881615d4c565b9050919050565b6000615d9a82615826565b9150615da583615826565b9250828202615db381615826565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615deb57615dea6148a5565b5b8282058414831517615e0057615dff6148a5565b5b5092915050565b6000615e1282615826565b9150615e1d83615826565b925082615e2d57615e2c614908565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615e6657615e656148a5565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615ecd602683613ad9565b9150615ed882615e71565b604082019050919050565b60006020820190508181036000830152615efc81615ec0565b905091905056fea264697066735822122014513cb1a0064db5c9629f88dfa2833b84407c3037a2b10d20a5061ea1aa744664736f6c63430008180033", + "bytecode": "0x60806040526003600c556040518060400160405280600160ff168152602001600a60ff16815250600f90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b615fde80620004b96000396000f3fe6080604052600436106101665760003560e01c8063642b5bfb116100d1578063a230c5241161008a578063da66863a11610064578063da66863a146105b0578063dd62ed3e146105ed578063e5b4d8271461062a578063f8300fca1461065357610166565b8063a230c524146104ee578063a23362791461052b578063a9059cbb1461057357610166565b8063642b5bfb146103c557806370a08231146103f0578063883802741461042d57806395d89b411461046a578063975762b3146104955780639fbe7c73146104be57610166565b806323b872dd1161012357806323b872dd146102915780632d17c062146102ce578063313ce567146102f757806350cde8ef146103225780635daf08ca1461035f5780635ffc70041461039c57610166565b806306fdde031461016b578063095ea7b31461019657806311aee380146101d357806317906c2e146101fe57806317c182171461022957806318160ddd14610266575b600080fd5b34801561017757600080fd5b50610180610692565b60405161018d9190613c03565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190613ccd565b610724565b6040516101ca9190613d28565b60405180910390f35b3480156101df57600080fd5b506101e8610747565b6040516101f59190613d52565b60405180910390f35b34801561020a57600080fd5b5061021361074d565b6040516102209190613d52565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613d6d565b610753565b60405161025d9190613d28565b60405180910390f35b34801561027257600080fd5b5061027b611135565b6040516102889190613d52565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190613d9a565b61113f565b6040516102c59190613d28565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613e19565b61117c565b005b34801561030357600080fd5b5061030c6111a5565b6040516103199190613e88565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613d6d565b6111ae565b6040516103569190613c03565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613d6d565b61125a565b6040516103939190613eb2565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613d9a565b61128d565b005b3480156103d157600080fd5b506103da6112bc565b6040516103e79190613d52565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613ecd565b6112c2565b6040516104249190613d52565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613efa565b61130a565b6040516104619190613d28565b60405180910390f35b34801561047657600080fd5b5061047f6113a5565b60405161048c9190613c03565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613f4d565b611437565b005b6104d860048036038101906104d39190614091565b61148a565b6040516104e59190613d52565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613ecd565b611944565b6040516105229190613d28565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613d6d565b611964565b60405161056a9c9b9a99989796959493929190614301565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613ccd565b611bde565b6040516105a79190613d28565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906143cb565b611c1b565b6040516105e49190614505565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190614527565b611d04565b6040516106219190613d52565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190614613565b611d8b565b005b34801561065f57600080fd5b5061067a600480360381019061067591906147f7565b61225e565b60405161068993929190614840565b60405180910390f35b6060600380546106a1906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546106cd906148ad565b801561071a5780601f106106ef5761010080835404028352916020019161071a565b820191906000526020600020905b8154815290600101906020018083116106fd57829003601f168201915b5050505050905090565b60008061072f612346565b905061073c81858561234e565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff161515146107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba9061492a565b60405180910390fd5b600080600080600090505b846005015481101561083f5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561081f578160020154846108189190614979565b9350610832565b81600201548361082f9190614979565b92505b80806001019150506107ce565b506002846003015461085191906149dc565b8361085c9190614979565b92506002846003015461086f91906149dc565b8261087a9190614979565b915060006002856003015461088f9190614a0d565b146108a4576001836108a19190614979565b92505b83600e01544211806108c757506108b9611135565b82846108c59190614979565b145b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90614ab0565b60405180910390fd5b836006016001016000600281106109205761091f614ad0565b5b015461092a611135565b6109349190614aff565b82846109409190614979565b8560060160010160016002811061095a57610959614ad0565b5b01546109669190614aff565b11610a9657600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81866000806040516109bc93929190614b41565b60405180910390a183600f0160029054906101000a900460ff1615610a89578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a44959493929190614c11565b6020604051808303816000875af1158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614c80565b505b6000945050505050611130565b83600601600301600060028110610ab057610aaf614ad0565b5b01548284610abe9190614979565b610ac89190614aff565b84600601600301600160028110610ae257610ae1614ad0565b5b015484610aef9190614aff565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b6093929190614b41565b60405180910390a1600085610b755782610b77565b835b905060008060005b8760050154811015610c7f5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c72576000606489600601600501548760020154610bd99190614aff565b610be391906149dc565b90508860060160060160009054906101000a900460ff1615610c4157610c2e8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612360565b8084610c3a9190614979565b9350610c70565b610c6f8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612585565b5b505b8080600101915050610b7f565b508715610e815760028760030154610c9791906149dc565b82610ca29190614979565b915060005b8760050154811015610d8d5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cff57508460010160009054906101000a900460ff161515891515145b15610d805760006064896006016005015486886002015487610d219190614aff565b610d2b91906149dc565b610d359190614aff565b610d3f91906149dc565b90508083610d4d9190614979565b9250610d7e308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610ca7565b5060008183610d9c9190614cad565b9050600060028960030154610db19190614a0d565b14610dc657600181610dc39190614979565b90505b610e7a886001018054610dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e04906148ad565b8015610e515780601f10610e2657610100808354040283529160200191610e51565b820191906000526020600020905b815481529060010190602001808311610e3457829003601f168201915b50505050508260028b60030154610e6891906149dc565b610e729190614979565b600080612607565b5050610f99565b866003015482610e919190614979565b915060005b8760050154811015610f975787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eee57508460010160009054906101000a900460ff161515891515145b15610f8a5760006064896006016005015460028b60030154610f1091906149dc565b87610f1b9190614cad565b886002015487610f2b9190614aff565b610f3591906149dc565b610f3f9190614aff565b610f4991906149dc565b90508083610f579190614979565b9250610f88308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610e96565b505b60005b6006548110156110625760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fe8611135565b610ff1836112c2565b8b600d01546110009190614aff565b61100a91906149dc565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611052573d6000803e3d6000fd5b5050508080600101915050610f9c565b5086600f0160029054906101000a900460ff1615611128578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b81526004016110e3959493929190614c11565b6020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190614c80565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390614d2d565b60405180910390fd5b6000600d6000858152602001908152602001600020905061119f813385856131af565b50505050565b60006009905090565b600981815481106111be57600080fd5b9060005260206000200160009150905080546111d9906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611205906148ad565b80156112525780601f1061122757610100808354040283529160200191611252565b820191906000526020600020905b81548152906001019060200180831161123557829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112988333836132a5565b6112b78383836112a88787611d04565b6112b29190614979565b61234e565b505050565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061132b33858561131c3389611d04565b6113269190614979565b61234e565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161136893929190614d4d565b600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546113b4906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546113e0906148ad565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b5050505050905090565b6000600d60008681526020019081526020016000209050826114598533611d04565b101561146c576114698433611d04565b92505b6114778433856132a5565b611483818585856131af565b5050505050565b60008034116114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614df6565b60405180910390fd5b6001891015611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614e62565b60405180910390fd5b651cae8c13e00089111561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614ece565b60405180910390fd5b8760016002811061156f5761156e614ad0565b5b6020020135600f60006002811061158957611588614ad0565b5b01546115959190614aff565b886000600281106115a9576115a8614ad0565b5b6020020135600f6001600281106115c3576115c2614ad0565b5b01546115cf9190614aff565b1015611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614f3a565b60405180910390fd5b8760016002811061162457611623614ad0565b5b60200201358860006002811061163d5761163c614ad0565b5b60200201351115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614fa6565b60405180910390fd5b8660016002811061169757611696614ad0565b5b6020020135876000600281106116b0576116af614ad0565b5b602002013511156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90615012565b60405180910390fd5b606486111561173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061507e565b60405180910390fd5b600060088c8c60405161174e9291906150ce565b9081526020016040518091039020905060008160020180549050036117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90615133565b60405180910390fd5b600e60008154809291906117bb90615153565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c82600101918261182e929190615352565b503481600d0181905550898160060160010190600261184e929190613b16565b508881600601600301906002611865929190613b16565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a426118a99190614979565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118e9929190615473565b506118f43034613339565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161192c9190613d52565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d60205280600052604060002060009150905080600001549080600101805461198d906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546119b9906148ad565b8015611a065780601f106119db57610100808354040283529160200191611a06565b820191906000526020600020905b8154815290600101906020018083116119e957829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611a93576020028201915b815481526020019060010190808311611a7f575b5050505050815260200160038201600280602002604051908101604052809291908260028015611ad8576020028201915b815481526020019060010190808311611ac4575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611b5b906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611b87906148ad565b8015611bd45780601f10611ba957610100808354040283529160200191611bd4565b820191906000526020600020905b815481529060010190602001808311611bb757829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290614d2d565b60405180910390fd5b6060600060088484604051611c319291906150ce565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611cf75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611c65565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906155b5565b60405180910390fd5b600a6000815480929190611de490615153565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611e26929190615352565b50600060088585604051611e3b9291906150ce565b908152602001604051809103902090506000816002018054905014611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90615647565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611eeb929190615352565b50600080600090505b88889050811015611f8a57888882818110611f1257611f11614ad0565b5b9050604002016000013582611f279190614979565b915082600201898983818110611f4057611f3f614ad0565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f7b91906157f4565b50508080600101915050611ef4565b50620f42408114611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790615874565b60405180910390fd5b60005b8484905081101561204b5782600301858583818110611ff557611ff4614ad0565b5b905060200281019061200791906158a3565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161203c9190615a0a565b50508080600101915050611fd3565b5060008060005b846003018054905081101561216f57600085600301828154811061207957612078614ad0565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc08112156120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790615a8a565b60405180910390fd5b620f4240811315612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90615b1c565b60405180910390fd5b600081131561215257808461214b9190615b3c565b9350612161565b808361215e9190615b3c565b92505b508080600101915050612052565b50620f42408213156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90615bf2565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090615c84565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af249727888860405161224a929190615cd1565b60405180910390a150505050505050505050565b600881805160208101820180518482526020830160208501208183528095505050505050600091509050806000018054612297906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546122c3906148ad565b80156123105780601f106122e557610100808354040283529160200191612310565b820191906000526020600020905b8154815290600101906020018083116122f357829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b61235b83838360016133bb565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b25780600260008282546123a69190614979565b92505081905550612485565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561243e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161243593929190614d4d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ce578060026000828254039250508190555061251b565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125789190613d52565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f75760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125ee9190613eb2565b60405180910390fd5b61260382600083612360565b5050565b6000600c54821061261a578390506131a7565b600060088660405161262c9190615d26565b90815260200160405180910390209050600081600201805490500361265457849150506131a7565b60005b816003018054905081101561278857600082600301828154811061267e5761267d614ad0565b5b906000526020600020906002020160000154121561277b5761276d878360030183815481106126b0576126af614ad0565b5b9060005260206000209060020201604051806040016040529081600082015481526020016001820180546126e3906148ad565b80601f016020809104026020016040519081016040528092919081815260200182805461270f906148ad565b801561275c5780601f106127315761010080835404028352916020019161275c565b820191906000526020600020905b81548152906001019060200180831161273f57829003601f168201915b505050505081525050888888613592565b866127789190615d3d565b95505b8080600101915050612657565b5060005b81600301805490508110156128bd5760008260030182815481106127b3576127b2614ad0565b5b90600052602060002090600202016000015413156128b0576128a2878360030183815481106127e5576127e4614ad0565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612818906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612844906148ad565b80156128915780601f1061286657610100808354040283529160200191612891565b820191906000526020600020905b81548152906001019060200180831161287457829003601f168201915b505050505081525050888888613592565b866128ad9190615d3d565b95505b808060010191505061278c565b506000851315612ba957612b88816040518060a00160405290816000820180546128e6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612912906148ad565b801561295f5780601f106129345761010080835404028352916020019161295f565b820191906000526020600020905b81548152906001019060200180831161294257829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612a755783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050815260200190600101906129e3565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612b70578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612adf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0b906148ad565b8015612b585780601f10612b2d57610100808354040283529160200191612b58565b820191906000526020600020905b815481529060010190602001808311612b3b57829003601f168201915b50505050508152505081526020019060010190612aa2565b5050505081526020016004820154815250508661375d565b5084816004016000828254612b9d9190614979565b925050819055506131a5565b6000858260040154612bbb9190615b3c565b12612eac57612e81816040518060a0016040529081600082018054612bdf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612c0b906148ad565b8015612c585780601f10612c2d57610100808354040283529160200191612c58565b820191906000526020600020905b815481529060010190602001808311612c3b57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612d6e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612cdc565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612e69578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612e04906148ad565b8015612e515780601f10612e2657610100808354040283529160200191612e51565b820191906000526020600020905b815481529060010190602001808311612e3457829003601f168201915b50505050508152505081526020019060010190612d9b565b5050505081526020016004820154815250508661375d565b915084612e8d90615d80565b816004016000828254612ea09190614cad565b925050819055506131a4565b848160040154612ebc9190615b3c565b915061318c816040518060a0016040529081600082018054612edd906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612f09906148ad565b8015612f565780601f10612f2b57610100808354040283529160200191612f56565b820191906000526020600020905b815481529060010190602001808311612f3957829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561306c5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612fda565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131675783829060005260206000209060020201604051806040016040529081600082015481526020016001820180546130d6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054613102906148ad565b801561314f5780601f106131245761010080835404028352916020019161314f565b820191906000526020600020905b81548152906001019060200180831161313257829003601f168201915b50505050508152505081526020019060010190613099565b505050508152602001600482015481525050826004015461318790615d80565b61375d565b826131979190615b3c565b9150600081600401819055505b5b505b949350505050565b83600e01544211156131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90615e14565b60405180910390fd5b600084600501600081548092919061320d90615153565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006132b18484611d04565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146133335781811015613323578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161331a93929190614d4d565b60405180910390fd5b613332848484840360006133bb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133ab5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016133a29190613eb2565b60405180910390fd5b6133b760008383612360565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361342d5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016134249190613eb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361349f5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016134969190613eb2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561358c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516135839190613d52565b60405180910390a35b50505050565b6000620f42408560000151856135a89190615e34565b6135b29190615eac565b9050600085602001515103613614576000811215613605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fc90615f88565b60405180910390fd5b61360f3082612585565b613754565b6000600b876040516136269190615d26565b908152602001604051809103902086602001516040516136469190615d26565b908152602001604051809103902054905083156136b357600082121561368e578061367090615d80565b8213613685578061368090615d80565b613687565b815b91506136b2565b8061369890615d80565b82126136ad57806136a890615d80565b6136af565b815b91505b5b60006136ec87602001518487806136da57506000871480156136d9575060008a60000151125b5b6001886136e79190614979565b612607565b905080836136fa9190615d3d565b925082600b8960405161370d9190615d26565b9081526020016040518091039020886020015160405161372d9190615d26565b9081526020016040518091039020600082825461374a9190615b3c565b9250508190555050505b95945050505050565b60008060005b8460400151518110156138b75760008560400151828151811061378957613788614ad0565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138a95780600560006006600081548092919061380090615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508080600101915050613763565b5060005b846040015151811015613b0e576000856040015182815181106138e1576138e0614ad0565b5b60200260200101519050600060018760400151516138ff9190614cad565b83101561393957620f424082600001518761391a9190615e34565b6139249190615eac565b905080846139329190615b3c565b9350613948565b83866139459190615d3d565b90505b6000811315613a835761396030836020015183612360565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a7e57816020015160056000600660008154809291906139d190615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613aff565b80613a8d90615d80565b613a9a83602001516112c2565b1015613ae557613aad82602001516112c2565b81613ab89190615b3c565b85613ac39190615b3c565b9450613ae0826020015130613adb85602001516112c2565b612360565b613afe565b613afd82602001513083613af890615d80565b612360565b5b5b505080806001019150506138bb565b505092915050565b8260028101928215613b45579160200282015b82811115613b44578235825591602001919060010190613b29565b5b509050613b529190613b56565b5090565b5b80821115613b6f576000816000905550600101613b57565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bad578082015181840152602081019050613b92565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bd582613b73565b613bdf8185613b7e565b9350613bef818560208601613b8f565b613bf881613bb9565b840191505092915050565b60006020820190508181036000830152613c1d8184613bca565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6482613c39565b9050919050565b613c7481613c59565b8114613c7f57600080fd5b50565b600081359050613c9181613c6b565b92915050565b6000819050919050565b613caa81613c97565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b60008060408385031215613ce457613ce3613c2f565b5b6000613cf285828601613c82565b9250506020613d0385828601613cb8565b9150509250929050565b60008115159050919050565b613d2281613d0d565b82525050565b6000602082019050613d3d6000830184613d19565b92915050565b613d4c81613c97565b82525050565b6000602082019050613d676000830184613d43565b92915050565b600060208284031215613d8357613d82613c2f565b5b6000613d9184828501613cb8565b91505092915050565b600080600060608486031215613db357613db2613c2f565b5b6000613dc186828701613c82565b9350506020613dd286828701613c82565b9250506040613de386828701613cb8565b9150509250925092565b613df681613d0d565b8114613e0157600080fd5b50565b600081359050613e1381613ded565b92915050565b600080600060608486031215613e3257613e31613c2f565b5b6000613e4086828701613cb8565b9350506020613e5186828701613cb8565b9250506040613e6286828701613e04565b9150509250925092565b600060ff82169050919050565b613e8281613e6c565b82525050565b6000602082019050613e9d6000830184613e79565b92915050565b613eac81613c59565b82525050565b6000602082019050613ec76000830184613ea3565b92915050565b600060208284031215613ee357613ee2613c2f565b5b6000613ef184828501613c82565b91505092915050565b600080600060608486031215613f1357613f12613c2f565b5b6000613f2186828701613c82565b9350506020613f3286828701613cb8565b9250506040613f4386828701613cb8565b9150509250925092565b60008060008060808587031215613f6757613f66613c2f565b5b6000613f7587828801613cb8565b9450506020613f8687828801613c82565b9350506040613f9787828801613cb8565b9250506060613fa887828801613e04565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613fd957613fd8613fb4565b5b8235905067ffffffffffffffff811115613ff657613ff5613fb9565b5b60208301915083600182028301111561401257614011613fbe565b5b9250929050565b60008190508260206002028201111561403557614034613fbe565b5b92915050565b60008083601f84011261405157614050613fb4565b5b8235905067ffffffffffffffff81111561406e5761406d613fb9565b5b60208301915083600182028301111561408a57614089613fbe565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140b5576140b4613c2f565b5b60008b013567ffffffffffffffff8111156140d3576140d2613c34565b5b6140df8d828e01613fc3565b9a509a505060206140f28d828e01613cb8565b98505060406141038d828e01614019565b97505060806141148d828e01614019565b96505060c06141258d828e01613cb8565b95505060e06141368d828e01613e04565b9450506101006141488d828e01613e04565b9350506101208b013567ffffffffffffffff81111561416a57614169613c34565b5b6141768d828e0161403b565b92509250509295989b9194979a5092959850565b61419381613c97565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b60006141c5838361418a565b60208301905092915050565b6000602082019050919050565b6141e781614199565b6141f181846141a4565b92506141fc826141af565b8060005b8381101561422d57815161421487826141b9565b965061421f836141d1565b925050600181019050614200565b505050505050565b61423e81613d0d565b82525050565b60e08201600082015161425a600085018261418a565b50602082015161426d60208501826141de565b50604082015161428060608501826141de565b50606082015161429360a085018261418a565b5060808201516142a660c0850182614235565b50505050565b600081519050919050565b600082825260208201905092915050565b60006142d3826142ac565b6142dd81856142b7565b93506142ed818560208601613b8f565b6142f681613bb9565b840191505092915050565b600061024082019050614317600083018f613d43565b8181036020830152614329818e613bca565b9050614338604083018d613ea3565b614345606083018c613d43565b614352608083018b613d43565b61435f60a083018a614244565b61436d610180830189613d43565b61437b6101a0830188613d43565b6143896101c0830187613d19565b6143976101e0830186613d19565b6143a5610200830185613d19565b8181036102208301526143b881846142c8565b90509d9c50505050505050505050505050565b600080602083850312156143e2576143e1613c2f565b5b600083013567ffffffffffffffff811115614400576143ff613c34565b5b61440c85828601613fc3565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61444d81613c59565b82525050565b604082016000820151614469600085018261418a565b50602082015161447c6020850182614444565b50505050565b600061448e8383614453565b60408301905092915050565b6000602082019050919050565b60006144b282614418565b6144bc8185614423565b93506144c783614434565b8060005b838110156144f85781516144df8882614482565b97506144ea8361449a565b9250506001810190506144cb565b5085935050505092915050565b6000602082019050818103600083015261451f81846144a7565b905092915050565b6000806040838503121561453e5761453d613c2f565b5b600061454c85828601613c82565b925050602061455d85828601613c82565b9150509250929050565b60008083601f84011261457d5761457c613fb4565b5b8235905067ffffffffffffffff81111561459a57614599613fb9565b5b6020830191508360408202830111156145b6576145b5613fbe565b5b9250929050565b60008083601f8401126145d3576145d2613fb4565b5b8235905067ffffffffffffffff8111156145f0576145ef613fb9565b5b60208301915083602082028301111561460c5761460b613fbe565b5b9250929050565b600080600080600080606087890312156146305761462f613c2f565b5b600087013567ffffffffffffffff81111561464e5761464d613c34565b5b61465a89828a01614567565b9650965050602087013567ffffffffffffffff81111561467d5761467c613c34565b5b61468989828a01613fc3565b9450945050604087013567ffffffffffffffff8111156146ac576146ab613c34565b5b6146b889828a016145bd565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61470482613bb9565b810181811067ffffffffffffffff82111715614723576147226146cc565b5b80604052505050565b6000614736613c25565b905061474282826146fb565b919050565b600067ffffffffffffffff821115614762576147616146cc565b5b61476b82613bb9565b9050602081019050919050565b82818337600083830152505050565b600061479a61479584614747565b61472c565b9050828152602081018484840111156147b6576147b56146c7565b5b6147c1848285614778565b509392505050565b600082601f8301126147de576147dd613fb4565b5b81356147ee848260208601614787565b91505092915050565b60006020828403121561480d5761480c613c2f565b5b600082013567ffffffffffffffff81111561482b5761482a613c34565b5b614837848285016147c9565b91505092915050565b6000606082019050818103600083015261485a8186613bca565b90506148696020830185613ea3565b6148766040830184613d43565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148c557607f821691505b6020821081036148d8576148d761487e565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000614914601883613b7e565b915061491f826148de565b602082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061498482613c97565b915061498f83613c97565b92508282019050808211156149a7576149a661494a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149e782613c97565b91506149f283613c97565b925082614a0257614a016149ad565b5b828204905092915050565b6000614a1882613c97565b9150614a2383613c97565b925082614a3357614a326149ad565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602183613b7e565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b0a82613c97565b9150614b1583613c97565b9250828202614b2381613c97565b91508282048414831517614b3a57614b3961494a565b5b5092915050565b6000606082019050614b566000830186613d43565b614b636020830185613d19565b614b706040830184613d19565b949350505050565b60008190508160005260206000209050919050565b60008154614b9a816148ad565b614ba481866142b7565b94506001821660008114614bbf5760018114614bd557614c08565b60ff198316865281151560200286019350614c08565b614bde85614b78565b60005b83811015614c0057815481890152600182019150602081019050614be1565b808801955050505b50505092915050565b600060a082019050614c266000830188613d19565b614c336020830187613d19565b614c406040830186613d43565b614c4d6060830185613d43565b8181036080830152614c5f8184614b8d565b90509695505050505050565b600081519050614c7a81613ca1565b92915050565b600060208284031215614c9657614c95613c2f565b5b6000614ca484828501614c6b565b91505092915050565b6000614cb882613c97565b9150614cc383613c97565b9250828203905081811115614cdb57614cda61494a565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614d17601b83613b7e565b9150614d2282614ce1565b602082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b6000606082019050614d626000830186613ea3565b614d6f6020830185613d43565b614d7c6040830184613d43565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614de0602b83613b7e565b9150614deb82614d84565b604082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614e4c601583613b7e565b9150614e5782614e16565b602082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614eb8601483613b7e565b9150614ec382614e82565b602082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614f24601783613b7e565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614f90601a83613b7e565b9150614f9b82614f5a565b602082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614ffc601d83613b7e565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000615068601e83613b7e565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b600081905092915050565b60006150b5838561509e565b93506150c2838584614778565b82840190509392505050565b60006150db8284866150a9565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b600061511d601583613b7e565b9150615128826150e7565b602082019050919050565b6000602082019050818103600083015261514c81615110565b9050919050565b600061515e82613c97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151905761518f61494a565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026152087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826151cb565b61521286836151cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061524f61524a61524584613c97565b61522a565b613c97565b9050919050565b6000819050919050565b61526983615234565b61527d61527582615256565b8484546151d8565b825550505050565b600090565b615292615285565b61529d818484615260565b505050565b5b818110156152c1576152b660008261528a565b6001810190506152a3565b5050565b601f821115615306576152d7816151a6565b6152e0846151bb565b810160208510156152ef578190505b6153036152fb856151bb565b8301826152a2565b50505b505050565b600082821c905092915050565b60006153296000198460080261530b565b1980831691505092915050565b60006153428383615318565b9150826002028217905092915050565b61535c838361519b565b67ffffffffffffffff811115615375576153746146cc565b5b61537f82546148ad565b61538a8282856152c5565b6000601f8311600181146153b957600084156153a7578287013590505b6153b18582615336565b865550615419565b601f1984166153c7866151a6565b60005b828110156153ef578489013582556001820191506020850194506020810190506153ca565b8683101561540c5784890135615408601f891682615318565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f82111561546e5761543f81614b78565b615448846151bb565b81016020851015615457578190505b61546b615463856151bb565b8301826152a2565b50505b505050565b61547d8383615422565b67ffffffffffffffff811115615496576154956146cc565b5b6154a082546148ad565b6154ab82828561542d565b6000601f8311600181146154da57600084156154c8578287013590505b6154d28582615336565b86555061553a565b601f1984166154e886614b78565b60005b82811015615510578489013582556001820191506020850194506020810190506154eb565b8683101561552d5784890135615529601f891682615318565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b600061559f602583613b7e565b91506155aa82615543565b604082019050919050565b600060208201905081810360008301526155ce81615592565b9050919050565b7f4120706f73742077697468207468697320706f7374496420616c72656164792060008201527f6578697374730000000000000000000000000000000000000000000000000000602082015250565b6000615631602683613b7e565b915061563c826155d5565b604082019050919050565b6000602082019050818103600083015261566081615624565b9050919050565b6000813561567481613ca1565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6156b68461567d565b9350801983169250808416831791505092915050565b6156d582615234565b6156e86156e182615256565b835461568a565b8255505050565b600081356156fc81613c6b565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff6157258461567d565b9350801983169250808416831791505092915050565b600061575661575161574c84613c39565b61522a565b613c39565b9050919050565b60006157688261573b565b9050919050565b600061577a8261575d565b9050919050565b6000819050919050565b6157948261576f565b6157a76157a082615781565b8354615705565b8255505050565b6000810160008301806157c081615667565b90506157cc81846156cc565b5050506001810160208301806157e1816156ef565b90506157ed818461578b565b5050505050565b6157fe82826157ae565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061585e602283613b7e565b915061586982615802565b604082019050919050565b6000602082019050818103600083015261588d81615851565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126158bf576158be615894565b5b80830191505092915050565b6000819050919050565b6158de816158cb565b81146158e957600080fd5b50565b600081356158f9816158d5565b80915050919050565b600061591d615918615913846158cb565b61522a565b6158cb565b9050919050565b6000819050919050565b61593782615902565b61594a61594382615924565b835461568a565b8255505050565b6000808335600160200384360303811261596e5761596d615894565b5b80840192508235915067ffffffffffffffff8211156159905761598f615899565b5b6020830192506001820236038313156159ac576159ab61589e565b5b509250929050565b6159bf838383615352565b505050565b6000810160008301806159d6816158ec565b90506159e2818461592e565b50505060018101602083016159f78185615951565b615a028183866159b4565b505050505050565b615a1482826159c4565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b6000615a74602883613b7e565b9150615a7f82615a18565b604082019050919050565b60006020820190508181036000830152615aa381615a67565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615b06602783613b7e565b9150615b1182615aaa565b604082019050919050565b60006020820190508181036000830152615b3581615af9565b9050919050565b6000615b47826158cb565b9150615b52836158cb565b925082820190508281121560008312168382126000841215161715615b7a57615b7961494a565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615bdc602c83613b7e565b9150615be782615b80565b604082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615c6e602d83613b7e565b9150615c7982615c12565b604082019050919050565b60006020820190508181036000830152615c9d81615c61565b9050919050565b6000615cb08385613b7e565b9350615cbd838584614778565b615cc683613bb9565b840190509392505050565b60006020820190508181036000830152615cec818486615ca4565b90509392505050565b6000615d0082613b73565b615d0a818561509e565b9350615d1a818560208601613b8f565b80840191505092915050565b6000615d328284615cf5565b915081905092915050565b6000615d48826158cb565b9150615d53836158cb565b9250828203905081811260008412168282136000851215161715615d7a57615d7961494a565b5b92915050565b6000615d8b826158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008203615dbd57615dbc61494a565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615dfe601883613b7e565b9150615e0982615dc8565b602082019050919050565b60006020820190508181036000830152615e2d81615df1565b9050919050565b6000615e3f826158cb565b9150615e4a836158cb565b9250828202615e58816158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615e9057615e8f61494a565b5b8282058414831517615ea557615ea461494a565b5b5092915050565b6000615eb7826158cb565b9150615ec2836158cb565b925082615ed257615ed16149ad565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615f0b57615f0a61494a565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615f72602683613b7e565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b905091905056fea26469706673582212203c08d9e6e172243d912d1691dc4d17cbcdcea762850048f7e5be4758d5eab84f64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106101665760003560e01c8063642b5bfb116100d1578063a230c5241161008a578063da66863a11610064578063da66863a146105b0578063dd62ed3e146105ed578063e5b4d8271461062a578063f8300fca1461065357610166565b8063a230c524146104ee578063a23362791461052b578063a9059cbb1461057357610166565b8063642b5bfb146103c557806370a08231146103f0578063883802741461042d57806395d89b411461046a578063975762b3146104955780639fbe7c73146104be57610166565b806323b872dd1161012357806323b872dd146102915780632d17c062146102ce578063313ce567146102f757806350cde8ef146103225780635daf08ca1461035f5780635ffc70041461039c57610166565b806306fdde031461016b578063095ea7b31461019657806311aee380146101d357806317906c2e146101fe57806317c182171461022957806318160ddd14610266575b600080fd5b34801561017757600080fd5b50610180610692565b60405161018d9190613c03565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190613ccd565b610724565b6040516101ca9190613d28565b60405180910390f35b3480156101df57600080fd5b506101e8610747565b6040516101f59190613d52565b60405180910390f35b34801561020a57600080fd5b5061021361074d565b6040516102209190613d52565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613d6d565b610753565b60405161025d9190613d28565b60405180910390f35b34801561027257600080fd5b5061027b611135565b6040516102889190613d52565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190613d9a565b61113f565b6040516102c59190613d28565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613e19565b61117c565b005b34801561030357600080fd5b5061030c6111a5565b6040516103199190613e88565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613d6d565b6111ae565b6040516103569190613c03565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613d6d565b61125a565b6040516103939190613eb2565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613d9a565b61128d565b005b3480156103d157600080fd5b506103da6112bc565b6040516103e79190613d52565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613ecd565b6112c2565b6040516104249190613d52565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613efa565b61130a565b6040516104619190613d28565b60405180910390f35b34801561047657600080fd5b5061047f6113a5565b60405161048c9190613c03565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613f4d565b611437565b005b6104d860048036038101906104d39190614091565b61148a565b6040516104e59190613d52565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613ecd565b611944565b6040516105229190613d28565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613d6d565b611964565b60405161056a9c9b9a99989796959493929190614301565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613ccd565b611bde565b6040516105a79190613d28565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906143cb565b611c1b565b6040516105e49190614505565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190614527565b611d04565b6040516106219190613d52565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190614613565b611d8b565b005b34801561065f57600080fd5b5061067a600480360381019061067591906147f7565b61225e565b60405161068993929190614840565b60405180910390f35b6060600380546106a1906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546106cd906148ad565b801561071a5780601f106106ef5761010080835404028352916020019161071a565b820191906000526020600020905b8154815290600101906020018083116106fd57829003601f168201915b5050505050905090565b60008061072f612346565b905061073c81858561234e565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff161515146107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba9061492a565b60405180910390fd5b600080600080600090505b846005015481101561083f5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561081f578160020154846108189190614979565b9350610832565b81600201548361082f9190614979565b92505b80806001019150506107ce565b506002846003015461085191906149dc565b8361085c9190614979565b92506002846003015461086f91906149dc565b8261087a9190614979565b915060006002856003015461088f9190614a0d565b146108a4576001836108a19190614979565b92505b83600e01544211806108c757506108b9611135565b82846108c59190614979565b145b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90614ab0565b60405180910390fd5b836006016001016000600281106109205761091f614ad0565b5b015461092a611135565b6109349190614aff565b82846109409190614979565b8560060160010160016002811061095a57610959614ad0565b5b01546109669190614aff565b11610a9657600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81866000806040516109bc93929190614b41565b60405180910390a183600f0160029054906101000a900460ff1615610a89578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a44959493929190614c11565b6020604051808303816000875af1158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614c80565b505b6000945050505050611130565b83600601600301600060028110610ab057610aaf614ad0565b5b01548284610abe9190614979565b610ac89190614aff565b84600601600301600160028110610ae257610ae1614ad0565b5b015484610aef9190614aff565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b6093929190614b41565b60405180910390a1600085610b755782610b77565b835b905060008060005b8760050154811015610c7f5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c72576000606489600601600501548760020154610bd99190614aff565b610be391906149dc565b90508860060160060160009054906101000a900460ff1615610c4157610c2e8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612360565b8084610c3a9190614979565b9350610c70565b610c6f8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612585565b5b505b8080600101915050610b7f565b508715610e815760028760030154610c9791906149dc565b82610ca29190614979565b915060005b8760050154811015610d8d5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cff57508460010160009054906101000a900460ff161515891515145b15610d805760006064896006016005015486886002015487610d219190614aff565b610d2b91906149dc565b610d359190614aff565b610d3f91906149dc565b90508083610d4d9190614979565b9250610d7e308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610ca7565b5060008183610d9c9190614cad565b9050600060028960030154610db19190614a0d565b14610dc657600181610dc39190614979565b90505b610e7a886001018054610dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e04906148ad565b8015610e515780601f10610e2657610100808354040283529160200191610e51565b820191906000526020600020905b815481529060010190602001808311610e3457829003601f168201915b50505050508260028b60030154610e6891906149dc565b610e729190614979565b600080612607565b5050610f99565b866003015482610e919190614979565b915060005b8760050154811015610f975787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eee57508460010160009054906101000a900460ff161515891515145b15610f8a5760006064896006016005015460028b60030154610f1091906149dc565b87610f1b9190614cad565b886002015487610f2b9190614aff565b610f3591906149dc565b610f3f9190614aff565b610f4991906149dc565b90508083610f579190614979565b9250610f88308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610e96565b505b60005b6006548110156110625760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fe8611135565b610ff1836112c2565b8b600d01546110009190614aff565b61100a91906149dc565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611052573d6000803e3d6000fd5b5050508080600101915050610f9c565b5086600f0160029054906101000a900460ff1615611128578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b81526004016110e3959493929190614c11565b6020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190614c80565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390614d2d565b60405180910390fd5b6000600d6000858152602001908152602001600020905061119f813385856131af565b50505050565b60006009905090565b600981815481106111be57600080fd5b9060005260206000200160009150905080546111d9906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611205906148ad565b80156112525780601f1061122757610100808354040283529160200191611252565b820191906000526020600020905b81548152906001019060200180831161123557829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112988333836132a5565b6112b78383836112a88787611d04565b6112b29190614979565b61234e565b505050565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061132b33858561131c3389611d04565b6113269190614979565b61234e565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161136893929190614d4d565b600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546113b4906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546113e0906148ad565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b5050505050905090565b6000600d60008681526020019081526020016000209050826114598533611d04565b101561146c576114698433611d04565b92505b6114778433856132a5565b611483818585856131af565b5050505050565b60008034116114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614df6565b60405180910390fd5b6001891015611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614e62565b60405180910390fd5b651cae8c13e00089111561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614ece565b60405180910390fd5b8760016002811061156f5761156e614ad0565b5b6020020135600f60006002811061158957611588614ad0565b5b01546115959190614aff565b886000600281106115a9576115a8614ad0565b5b6020020135600f6001600281106115c3576115c2614ad0565b5b01546115cf9190614aff565b1015611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614f3a565b60405180910390fd5b8760016002811061162457611623614ad0565b5b60200201358860006002811061163d5761163c614ad0565b5b60200201351115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614fa6565b60405180910390fd5b8660016002811061169757611696614ad0565b5b6020020135876000600281106116b0576116af614ad0565b5b602002013511156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90615012565b60405180910390fd5b606486111561173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061507e565b60405180910390fd5b600060088c8c60405161174e9291906150ce565b9081526020016040518091039020905060008160020180549050036117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90615133565b60405180910390fd5b600e60008154809291906117bb90615153565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c82600101918261182e929190615352565b503481600d0181905550898160060160010190600261184e929190613b16565b508881600601600301906002611865929190613b16565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a426118a99190614979565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118e9929190615473565b506118f43034613339565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161192c9190613d52565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d60205280600052604060002060009150905080600001549080600101805461198d906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546119b9906148ad565b8015611a065780601f106119db57610100808354040283529160200191611a06565b820191906000526020600020905b8154815290600101906020018083116119e957829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611a93576020028201915b815481526020019060010190808311611a7f575b5050505050815260200160038201600280602002604051908101604052809291908260028015611ad8576020028201915b815481526020019060010190808311611ac4575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611b5b906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611b87906148ad565b8015611bd45780601f10611ba957610100808354040283529160200191611bd4565b820191906000526020600020905b815481529060010190602001808311611bb757829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290614d2d565b60405180910390fd5b6060600060088484604051611c319291906150ce565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611cf75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611c65565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906155b5565b60405180910390fd5b600a6000815480929190611de490615153565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611e26929190615352565b50600060088585604051611e3b9291906150ce565b908152602001604051809103902090506000816002018054905014611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90615647565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611eeb929190615352565b50600080600090505b88889050811015611f8a57888882818110611f1257611f11614ad0565b5b9050604002016000013582611f279190614979565b915082600201898983818110611f4057611f3f614ad0565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f7b91906157f4565b50508080600101915050611ef4565b50620f42408114611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790615874565b60405180910390fd5b60005b8484905081101561204b5782600301858583818110611ff557611ff4614ad0565b5b905060200281019061200791906158a3565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161203c9190615a0a565b50508080600101915050611fd3565b5060008060005b846003018054905081101561216f57600085600301828154811061207957612078614ad0565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc08112156120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790615a8a565b60405180910390fd5b620f4240811315612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90615b1c565b60405180910390fd5b600081131561215257808461214b9190615b3c565b9350612161565b808361215e9190615b3c565b92505b508080600101915050612052565b50620f42408213156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90615bf2565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090615c84565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af249727888860405161224a929190615cd1565b60405180910390a150505050505050505050565b600881805160208101820180518482526020830160208501208183528095505050505050600091509050806000018054612297906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546122c3906148ad565b80156123105780601f106122e557610100808354040283529160200191612310565b820191906000526020600020905b8154815290600101906020018083116122f357829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b61235b83838360016133bb565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b25780600260008282546123a69190614979565b92505081905550612485565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561243e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161243593929190614d4d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ce578060026000828254039250508190555061251b565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125789190613d52565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f75760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125ee9190613eb2565b60405180910390fd5b61260382600083612360565b5050565b6000600c54821061261a578390506131a7565b600060088660405161262c9190615d26565b90815260200160405180910390209050600081600201805490500361265457849150506131a7565b60005b816003018054905081101561278857600082600301828154811061267e5761267d614ad0565b5b906000526020600020906002020160000154121561277b5761276d878360030183815481106126b0576126af614ad0565b5b9060005260206000209060020201604051806040016040529081600082015481526020016001820180546126e3906148ad565b80601f016020809104026020016040519081016040528092919081815260200182805461270f906148ad565b801561275c5780601f106127315761010080835404028352916020019161275c565b820191906000526020600020905b81548152906001019060200180831161273f57829003601f168201915b505050505081525050888888613592565b866127789190615d3d565b95505b8080600101915050612657565b5060005b81600301805490508110156128bd5760008260030182815481106127b3576127b2614ad0565b5b90600052602060002090600202016000015413156128b0576128a2878360030183815481106127e5576127e4614ad0565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612818906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612844906148ad565b80156128915780601f1061286657610100808354040283529160200191612891565b820191906000526020600020905b81548152906001019060200180831161287457829003601f168201915b505050505081525050888888613592565b866128ad9190615d3d565b95505b808060010191505061278c565b506000851315612ba957612b88816040518060a00160405290816000820180546128e6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612912906148ad565b801561295f5780601f106129345761010080835404028352916020019161295f565b820191906000526020600020905b81548152906001019060200180831161294257829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612a755783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050815260200190600101906129e3565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612b70578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612adf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0b906148ad565b8015612b585780601f10612b2d57610100808354040283529160200191612b58565b820191906000526020600020905b815481529060010190602001808311612b3b57829003601f168201915b50505050508152505081526020019060010190612aa2565b5050505081526020016004820154815250508661375d565b5084816004016000828254612b9d9190614979565b925050819055506131a5565b6000858260040154612bbb9190615b3c565b12612eac57612e81816040518060a0016040529081600082018054612bdf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612c0b906148ad565b8015612c585780601f10612c2d57610100808354040283529160200191612c58565b820191906000526020600020905b815481529060010190602001808311612c3b57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612d6e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612cdc565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612e69578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612e04906148ad565b8015612e515780601f10612e2657610100808354040283529160200191612e51565b820191906000526020600020905b815481529060010190602001808311612e3457829003601f168201915b50505050508152505081526020019060010190612d9b565b5050505081526020016004820154815250508661375d565b915084612e8d90615d80565b816004016000828254612ea09190614cad565b925050819055506131a4565b848160040154612ebc9190615b3c565b915061318c816040518060a0016040529081600082018054612edd906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612f09906148ad565b8015612f565780601f10612f2b57610100808354040283529160200191612f56565b820191906000526020600020905b815481529060010190602001808311612f3957829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561306c5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612fda565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131675783829060005260206000209060020201604051806040016040529081600082015481526020016001820180546130d6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054613102906148ad565b801561314f5780601f106131245761010080835404028352916020019161314f565b820191906000526020600020905b81548152906001019060200180831161313257829003601f168201915b50505050508152505081526020019060010190613099565b505050508152602001600482015481525050826004015461318790615d80565b61375d565b826131979190615b3c565b9150600081600401819055505b5b505b949350505050565b83600e01544211156131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90615e14565b60405180910390fd5b600084600501600081548092919061320d90615153565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006132b18484611d04565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146133335781811015613323578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161331a93929190614d4d565b60405180910390fd5b613332848484840360006133bb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133ab5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016133a29190613eb2565b60405180910390fd5b6133b760008383612360565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361342d5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016134249190613eb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361349f5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016134969190613eb2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561358c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516135839190613d52565b60405180910390a35b50505050565b6000620f42408560000151856135a89190615e34565b6135b29190615eac565b9050600085602001515103613614576000811215613605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fc90615f88565b60405180910390fd5b61360f3082612585565b613754565b6000600b876040516136269190615d26565b908152602001604051809103902086602001516040516136469190615d26565b908152602001604051809103902054905083156136b357600082121561368e578061367090615d80565b8213613685578061368090615d80565b613687565b815b91506136b2565b8061369890615d80565b82126136ad57806136a890615d80565b6136af565b815b91505b5b60006136ec87602001518487806136da57506000871480156136d9575060008a60000151125b5b6001886136e79190614979565b612607565b905080836136fa9190615d3d565b925082600b8960405161370d9190615d26565b9081526020016040518091039020886020015160405161372d9190615d26565b9081526020016040518091039020600082825461374a9190615b3c565b9250508190555050505b95945050505050565b60008060005b8460400151518110156138b75760008560400151828151811061378957613788614ad0565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138a95780600560006006600081548092919061380090615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508080600101915050613763565b5060005b846040015151811015613b0e576000856040015182815181106138e1576138e0614ad0565b5b60200260200101519050600060018760400151516138ff9190614cad565b83101561393957620f424082600001518761391a9190615e34565b6139249190615eac565b905080846139329190615b3c565b9350613948565b83866139459190615d3d565b90505b6000811315613a835761396030836020015183612360565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a7e57816020015160056000600660008154809291906139d190615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613aff565b80613a8d90615d80565b613a9a83602001516112c2565b1015613ae557613aad82602001516112c2565b81613ab89190615b3c565b85613ac39190615b3c565b9450613ae0826020015130613adb85602001516112c2565b612360565b613afe565b613afd82602001513083613af890615d80565b612360565b5b5b505080806001019150506138bb565b505092915050565b8260028101928215613b45579160200282015b82811115613b44578235825591602001919060010190613b29565b5b509050613b529190613b56565b5090565b5b80821115613b6f576000816000905550600101613b57565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bad578082015181840152602081019050613b92565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bd582613b73565b613bdf8185613b7e565b9350613bef818560208601613b8f565b613bf881613bb9565b840191505092915050565b60006020820190508181036000830152613c1d8184613bca565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6482613c39565b9050919050565b613c7481613c59565b8114613c7f57600080fd5b50565b600081359050613c9181613c6b565b92915050565b6000819050919050565b613caa81613c97565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b60008060408385031215613ce457613ce3613c2f565b5b6000613cf285828601613c82565b9250506020613d0385828601613cb8565b9150509250929050565b60008115159050919050565b613d2281613d0d565b82525050565b6000602082019050613d3d6000830184613d19565b92915050565b613d4c81613c97565b82525050565b6000602082019050613d676000830184613d43565b92915050565b600060208284031215613d8357613d82613c2f565b5b6000613d9184828501613cb8565b91505092915050565b600080600060608486031215613db357613db2613c2f565b5b6000613dc186828701613c82565b9350506020613dd286828701613c82565b9250506040613de386828701613cb8565b9150509250925092565b613df681613d0d565b8114613e0157600080fd5b50565b600081359050613e1381613ded565b92915050565b600080600060608486031215613e3257613e31613c2f565b5b6000613e4086828701613cb8565b9350506020613e5186828701613cb8565b9250506040613e6286828701613e04565b9150509250925092565b600060ff82169050919050565b613e8281613e6c565b82525050565b6000602082019050613e9d6000830184613e79565b92915050565b613eac81613c59565b82525050565b6000602082019050613ec76000830184613ea3565b92915050565b600060208284031215613ee357613ee2613c2f565b5b6000613ef184828501613c82565b91505092915050565b600080600060608486031215613f1357613f12613c2f565b5b6000613f2186828701613c82565b9350506020613f3286828701613cb8565b9250506040613f4386828701613cb8565b9150509250925092565b60008060008060808587031215613f6757613f66613c2f565b5b6000613f7587828801613cb8565b9450506020613f8687828801613c82565b9350506040613f9787828801613cb8565b9250506060613fa887828801613e04565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613fd957613fd8613fb4565b5b8235905067ffffffffffffffff811115613ff657613ff5613fb9565b5b60208301915083600182028301111561401257614011613fbe565b5b9250929050565b60008190508260206002028201111561403557614034613fbe565b5b92915050565b60008083601f84011261405157614050613fb4565b5b8235905067ffffffffffffffff81111561406e5761406d613fb9565b5b60208301915083600182028301111561408a57614089613fbe565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140b5576140b4613c2f565b5b60008b013567ffffffffffffffff8111156140d3576140d2613c34565b5b6140df8d828e01613fc3565b9a509a505060206140f28d828e01613cb8565b98505060406141038d828e01614019565b97505060806141148d828e01614019565b96505060c06141258d828e01613cb8565b95505060e06141368d828e01613e04565b9450506101006141488d828e01613e04565b9350506101208b013567ffffffffffffffff81111561416a57614169613c34565b5b6141768d828e0161403b565b92509250509295989b9194979a5092959850565b61419381613c97565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b60006141c5838361418a565b60208301905092915050565b6000602082019050919050565b6141e781614199565b6141f181846141a4565b92506141fc826141af565b8060005b8381101561422d57815161421487826141b9565b965061421f836141d1565b925050600181019050614200565b505050505050565b61423e81613d0d565b82525050565b60e08201600082015161425a600085018261418a565b50602082015161426d60208501826141de565b50604082015161428060608501826141de565b50606082015161429360a085018261418a565b5060808201516142a660c0850182614235565b50505050565b600081519050919050565b600082825260208201905092915050565b60006142d3826142ac565b6142dd81856142b7565b93506142ed818560208601613b8f565b6142f681613bb9565b840191505092915050565b600061024082019050614317600083018f613d43565b8181036020830152614329818e613bca565b9050614338604083018d613ea3565b614345606083018c613d43565b614352608083018b613d43565b61435f60a083018a614244565b61436d610180830189613d43565b61437b6101a0830188613d43565b6143896101c0830187613d19565b6143976101e0830186613d19565b6143a5610200830185613d19565b8181036102208301526143b881846142c8565b90509d9c50505050505050505050505050565b600080602083850312156143e2576143e1613c2f565b5b600083013567ffffffffffffffff811115614400576143ff613c34565b5b61440c85828601613fc3565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61444d81613c59565b82525050565b604082016000820151614469600085018261418a565b50602082015161447c6020850182614444565b50505050565b600061448e8383614453565b60408301905092915050565b6000602082019050919050565b60006144b282614418565b6144bc8185614423565b93506144c783614434565b8060005b838110156144f85781516144df8882614482565b97506144ea8361449a565b9250506001810190506144cb565b5085935050505092915050565b6000602082019050818103600083015261451f81846144a7565b905092915050565b6000806040838503121561453e5761453d613c2f565b5b600061454c85828601613c82565b925050602061455d85828601613c82565b9150509250929050565b60008083601f84011261457d5761457c613fb4565b5b8235905067ffffffffffffffff81111561459a57614599613fb9565b5b6020830191508360408202830111156145b6576145b5613fbe565b5b9250929050565b60008083601f8401126145d3576145d2613fb4565b5b8235905067ffffffffffffffff8111156145f0576145ef613fb9565b5b60208301915083602082028301111561460c5761460b613fbe565b5b9250929050565b600080600080600080606087890312156146305761462f613c2f565b5b600087013567ffffffffffffffff81111561464e5761464d613c34565b5b61465a89828a01614567565b9650965050602087013567ffffffffffffffff81111561467d5761467c613c34565b5b61468989828a01613fc3565b9450945050604087013567ffffffffffffffff8111156146ac576146ab613c34565b5b6146b889828a016145bd565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61470482613bb9565b810181811067ffffffffffffffff82111715614723576147226146cc565b5b80604052505050565b6000614736613c25565b905061474282826146fb565b919050565b600067ffffffffffffffff821115614762576147616146cc565b5b61476b82613bb9565b9050602081019050919050565b82818337600083830152505050565b600061479a61479584614747565b61472c565b9050828152602081018484840111156147b6576147b56146c7565b5b6147c1848285614778565b509392505050565b600082601f8301126147de576147dd613fb4565b5b81356147ee848260208601614787565b91505092915050565b60006020828403121561480d5761480c613c2f565b5b600082013567ffffffffffffffff81111561482b5761482a613c34565b5b614837848285016147c9565b91505092915050565b6000606082019050818103600083015261485a8186613bca565b90506148696020830185613ea3565b6148766040830184613d43565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148c557607f821691505b6020821081036148d8576148d761487e565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000614914601883613b7e565b915061491f826148de565b602082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061498482613c97565b915061498f83613c97565b92508282019050808211156149a7576149a661494a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149e782613c97565b91506149f283613c97565b925082614a0257614a016149ad565b5b828204905092915050565b6000614a1882613c97565b9150614a2383613c97565b925082614a3357614a326149ad565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602183613b7e565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b0a82613c97565b9150614b1583613c97565b9250828202614b2381613c97565b91508282048414831517614b3a57614b3961494a565b5b5092915050565b6000606082019050614b566000830186613d43565b614b636020830185613d19565b614b706040830184613d19565b949350505050565b60008190508160005260206000209050919050565b60008154614b9a816148ad565b614ba481866142b7565b94506001821660008114614bbf5760018114614bd557614c08565b60ff198316865281151560200286019350614c08565b614bde85614b78565b60005b83811015614c0057815481890152600182019150602081019050614be1565b808801955050505b50505092915050565b600060a082019050614c266000830188613d19565b614c336020830187613d19565b614c406040830186613d43565b614c4d6060830185613d43565b8181036080830152614c5f8184614b8d565b90509695505050505050565b600081519050614c7a81613ca1565b92915050565b600060208284031215614c9657614c95613c2f565b5b6000614ca484828501614c6b565b91505092915050565b6000614cb882613c97565b9150614cc383613c97565b9250828203905081811115614cdb57614cda61494a565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614d17601b83613b7e565b9150614d2282614ce1565b602082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b6000606082019050614d626000830186613ea3565b614d6f6020830185613d43565b614d7c6040830184613d43565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614de0602b83613b7e565b9150614deb82614d84565b604082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614e4c601583613b7e565b9150614e5782614e16565b602082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614eb8601483613b7e565b9150614ec382614e82565b602082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614f24601783613b7e565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614f90601a83613b7e565b9150614f9b82614f5a565b602082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614ffc601d83613b7e565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000615068601e83613b7e565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b600081905092915050565b60006150b5838561509e565b93506150c2838584614778565b82840190509392505050565b60006150db8284866150a9565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b600061511d601583613b7e565b9150615128826150e7565b602082019050919050565b6000602082019050818103600083015261514c81615110565b9050919050565b600061515e82613c97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151905761518f61494a565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026152087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826151cb565b61521286836151cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061524f61524a61524584613c97565b61522a565b613c97565b9050919050565b6000819050919050565b61526983615234565b61527d61527582615256565b8484546151d8565b825550505050565b600090565b615292615285565b61529d818484615260565b505050565b5b818110156152c1576152b660008261528a565b6001810190506152a3565b5050565b601f821115615306576152d7816151a6565b6152e0846151bb565b810160208510156152ef578190505b6153036152fb856151bb565b8301826152a2565b50505b505050565b600082821c905092915050565b60006153296000198460080261530b565b1980831691505092915050565b60006153428383615318565b9150826002028217905092915050565b61535c838361519b565b67ffffffffffffffff811115615375576153746146cc565b5b61537f82546148ad565b61538a8282856152c5565b6000601f8311600181146153b957600084156153a7578287013590505b6153b18582615336565b865550615419565b601f1984166153c7866151a6565b60005b828110156153ef578489013582556001820191506020850194506020810190506153ca565b8683101561540c5784890135615408601f891682615318565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f82111561546e5761543f81614b78565b615448846151bb565b81016020851015615457578190505b61546b615463856151bb565b8301826152a2565b50505b505050565b61547d8383615422565b67ffffffffffffffff811115615496576154956146cc565b5b6154a082546148ad565b6154ab82828561542d565b6000601f8311600181146154da57600084156154c8578287013590505b6154d28582615336565b86555061553a565b601f1984166154e886614b78565b60005b82811015615510578489013582556001820191506020850194506020810190506154eb565b8683101561552d5784890135615529601f891682615318565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b600061559f602583613b7e565b91506155aa82615543565b604082019050919050565b600060208201905081810360008301526155ce81615592565b9050919050565b7f4120706f73742077697468207468697320706f7374496420616c72656164792060008201527f6578697374730000000000000000000000000000000000000000000000000000602082015250565b6000615631602683613b7e565b915061563c826155d5565b604082019050919050565b6000602082019050818103600083015261566081615624565b9050919050565b6000813561567481613ca1565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6156b68461567d565b9350801983169250808416831791505092915050565b6156d582615234565b6156e86156e182615256565b835461568a565b8255505050565b600081356156fc81613c6b565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff6157258461567d565b9350801983169250808416831791505092915050565b600061575661575161574c84613c39565b61522a565b613c39565b9050919050565b60006157688261573b565b9050919050565b600061577a8261575d565b9050919050565b6000819050919050565b6157948261576f565b6157a76157a082615781565b8354615705565b8255505050565b6000810160008301806157c081615667565b90506157cc81846156cc565b5050506001810160208301806157e1816156ef565b90506157ed818461578b565b5050505050565b6157fe82826157ae565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061585e602283613b7e565b915061586982615802565b604082019050919050565b6000602082019050818103600083015261588d81615851565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126158bf576158be615894565b5b80830191505092915050565b6000819050919050565b6158de816158cb565b81146158e957600080fd5b50565b600081356158f9816158d5565b80915050919050565b600061591d615918615913846158cb565b61522a565b6158cb565b9050919050565b6000819050919050565b61593782615902565b61594a61594382615924565b835461568a565b8255505050565b6000808335600160200384360303811261596e5761596d615894565b5b80840192508235915067ffffffffffffffff8211156159905761598f615899565b5b6020830192506001820236038313156159ac576159ab61589e565b5b509250929050565b6159bf838383615352565b505050565b6000810160008301806159d6816158ec565b90506159e2818461592e565b50505060018101602083016159f78185615951565b615a028183866159b4565b505050505050565b615a1482826159c4565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b6000615a74602883613b7e565b9150615a7f82615a18565b604082019050919050565b60006020820190508181036000830152615aa381615a67565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615b06602783613b7e565b9150615b1182615aaa565b604082019050919050565b60006020820190508181036000830152615b3581615af9565b9050919050565b6000615b47826158cb565b9150615b52836158cb565b925082820190508281121560008312168382126000841215161715615b7a57615b7961494a565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615bdc602c83613b7e565b9150615be782615b80565b604082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615c6e602d83613b7e565b9150615c7982615c12565b604082019050919050565b60006020820190508181036000830152615c9d81615c61565b9050919050565b6000615cb08385613b7e565b9350615cbd838584614778565b615cc683613bb9565b840190509392505050565b60006020820190508181036000830152615cec818486615ca4565b90509392505050565b6000615d0082613b73565b615d0a818561509e565b9350615d1a818560208601613b8f565b80840191505092915050565b6000615d328284615cf5565b915081905092915050565b6000615d48826158cb565b9150615d53836158cb565b9250828203905081811260008412168282136000851215161715615d7a57615d7961494a565b5b92915050565b6000615d8b826158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008203615dbd57615dbc61494a565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615dfe601883613b7e565b9150615e0982615dc8565b602082019050919050565b60006020820190508181036000830152615e2d81615df1565b9050919050565b6000615e3f826158cb565b9150615e4a836158cb565b9250828202615e58816158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615e9057615e8f61494a565b5b8282058414831517615ea557615ea461494a565b5b5092915050565b6000615eb7826158cb565b9150615ec2836158cb565b925082615ed257615ed16149ad565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615f0b57615f0a61494a565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615f72602683613b7e565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b905091905056fea26469706673582212203c08d9e6e172243d912d1691dc4d17cbcdcea762850048f7e5be4758d5eab84f64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/backend/contractArtifacts/Onboarding.json b/backend/contractArtifacts/Onboarding.json index 26d65b5..91013d6 100644 --- a/backend/contractArtifacts/Onboarding.json +++ b/backend/contractArtifacts/Onboarding.json @@ -288,7 +288,7 @@ }, { "internalType": "string", - "name": "contentId", + "name": "postId", "type": "string" }, { @@ -319,7 +319,7 @@ "inputs": [ { "internalType": "string", - "name": "requestContentId", + "name": "requestPostId", "type": "string" } ], @@ -349,7 +349,7 @@ "type": "uint256" }, { - "internalType": "enum WorkContract.WorkStatus", + "internalType": "enum Work.WorkStatus", "name": "status", "type": "uint8" }, @@ -360,12 +360,12 @@ }, { "internalType": "string", - "name": "requestContentId", + "name": "requestPostId", "type": "string" }, { "internalType": "string", - "name": "evidenceContentId", + "name": "evidencePostId", "type": "string" }, { @@ -451,7 +451,7 @@ }, { "internalType": "string", - "name": "evidenceContentId", + "name": "evidencePostId", "type": "string" }, { @@ -478,8 +478,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620035ac380380620035ac8339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b6080516133506200025c6000396000818161098101528181610a5101528181610b6e01528181610d8101528181610f9b015261102d01526133506000f3fe6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b610107600480360381019061010291906117ff565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b91906118e0565b61049e565b005b34801561013e57600080fd5b506101476105b1565b6040516101549190611942565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f91906119b3565b6105b7565b6040516101919190611942565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611a27565b610636565b6040516101d49796959493929190611b85565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611c2e565b6107c2565b005b610220600480360381019061021b9190611c90565b610c2e565b005b34801561022e57600080fd5b50610237610d77565b6040516102449190611942565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d04565b610d7d565b6040516102819190611942565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611d9e565b61112b565b005b3480156102bf57600080fd5b506102c86112a0565b6040516102d59190611942565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190611a27565b6112a6565b604051610313929190611dde565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611e5d565b6112ca565b005b34801561035157600080fd5b5061036c60048036038101906103679190611a27565b611503565b60405161037c9493929190611ef2565b60405180910390f35b34801561039157600080fd5b5061039a611560565b6040516103a79190611942565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611f83565b60405180910390fd5b60006007600081548092919061040a90611fd2565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611566565b81600301819055508383826004019182610497929190612260565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d89061237c565b60405180910390fd5b6000600560008154809291906104f690611fd2565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b919061239c565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a29190611942565b60405180910390a15050505050565b60075481565b60008083838101906105c99190611a27565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611dde565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90612083565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90612083565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90612083565b80601f016020809104026020016040519081016040528092919081815260200182805461075890612083565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec611a63565b5b8160020160009054906101000a900460ff16600381111561081157610810611a63565b5b14610851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489061241c565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561089457610893611a63565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff8111156108d2576108d1612025565b5b60405190808252806020026020018201604052801561090b57816020015b6108f8611760565b8152602001906001900390816108f05790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250816000815181106109745761097361243c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b81526004016109e2939291906127d9565b600060405180830381600087803b1580156109fc57600080fd5b505af1158015610a10573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610a45929190612825565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8660010154610a9c919061287d565b8660010154610aab91906128ae565b8660050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610af59190611942565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610b27989796959493929190612a0e565b60206040518083038185885af1158015610b45573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b6a9190612ab1565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610bf49493929190612ade565b600060405180830381600087803b158015610c0e57600080fd5b505af1158015610c22573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610c4390611fd2565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610cbd9190611942565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610ced96959493929190612b78565b60206040518083038185885af1158015610d0b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d309190612ab1565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610d679190611942565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490612c4d565b60405180910390fd5b60008383810190610e1e9190611a27565b90506000600660008381526020019081526020016000209050881580610e42575087155b15610ecd578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610e96919061287d565b9081150290604051600060405180830381858888f19350505050158015610ec1573d6000803e3d6000fd5b50600192505050611121565b60606000600167ffffffffffffffff811115610eec57610eeb612025565b5b604051908082528060200260200182016040528015610f2557816020015b610f12611760565b815260200190600190039081610f0a5790505b5090506040518060400160405280620f424081526020018460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610f8e57610f8d61243c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600401856040518463ffffffff1660e01b8152600401610ff993929190612d94565b600060405180830381600087803b15801561101357600080fd5b505af1158015611027573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8560010154611078919061287d565b856004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016110d49796959493929190612e06565b60206040518083038185885af11580156110f2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111179190612ab1565b5060009450505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90612f04565b60405180910390fd5b8060030160009054906101000a900460ff1615611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90612f96565b60405180910390fd5b806002015442111561124b57814261123e919061239c565b8160020181905550611264565b81816002015461125b919061239c565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516112939190611942565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156112f5576112f4611a63565b5b8160020160009054906101000a900460ff16600381111561131957611318611a63565b5b14611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613002565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613094565b60405180910390fd5b60018260020160006101000a81548160ff0219169083600381111561142e5761142d611a63565b5b02179055508585836005019182611446929190612260565b5060005b848490508110156114c2578260060185858381811061146c5761146b61243c565b5b905060200281019061147e91906130c3565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816114b3919061326f565b5050808060010191505061144a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516114f29190611942565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b60006115706115e5565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516115d7929190611dde565b60405180910390a150919050565b60008060005b60055481101561166c576004600082815260200190815260200160002060030160009054906101000a900460ff1661165f576004600082815260200190815260200160002060020154421161165f5760046000828152602001908152602001600020600101548261165c919061239c565b91505b80806001019150506115eb565b50600081116116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a7906132c9565b60405180910390fd5b600081446116be91906132e9565b9050600080600090505b600554811015611759576004600082815260200190815260200160002060030160009054906101000a900460ff1661174c576004600082815260200190815260200160002060020154421161174c57600460008281526020019081526020016000206001015482611739919061239c565b91508282111561174b57809450611759565b5b80806001019150506116c8565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126117bf576117be61179a565b5b8235905067ffffffffffffffff8111156117dc576117db61179f565b5b6020830191508360018202830111156117f8576117f76117a4565b5b9250929050565b6000806020838503121561181657611815611790565b5b600083013567ffffffffffffffff81111561183457611833611795565b5b611840858286016117a9565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118778261184c565b9050919050565b6118878161186c565b811461189257600080fd5b50565b6000813590506118a48161187e565b92915050565b6000819050919050565b6118bd816118aa565b81146118c857600080fd5b50565b6000813590506118da816118b4565b92915050565b6000806000606084860312156118f9576118f8611790565b5b600061190786828701611895565b9350506020611918868287016118cb565b9250506040611929868287016118cb565b9150509250925092565b61193c816118aa565b82525050565b60006020820190506119576000830184611933565b92915050565b60008083601f8401126119735761197261179a565b5b8235905067ffffffffffffffff8111156119905761198f61179f565b5b6020830191508360018202830111156119ac576119ab6117a4565b5b9250929050565b600080600080606085870312156119cd576119cc611790565b5b60006119db878288016118cb565b94505060206119ec878288016118cb565b935050604085013567ffffffffffffffff811115611a0d57611a0c611795565b5b611a198782880161195d565b925092505092959194509250565b600060208284031215611a3d57611a3c611790565b5b6000611a4b848285016118cb565b91505092915050565b611a5d8161186c565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611aa357611aa2611a63565b5b50565b6000819050611ab482611a92565b919050565b6000611ac482611aa6565b9050919050565b611ad481611ab9565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b14578082015181840152602081019050611af9565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b3c82611ada565b611b468185611ae5565b9350611b56818560208601611af6565b611b5f81611b20565b840191505092915050565b60008115159050919050565b611b7f81611b6a565b82525050565b600060e082019050611b9a600083018a611a54565b611ba76020830189611933565b611bb46040830188611acb565b611bc16060830187611933565b8181036080830152611bd38186611b31565b905081810360a0830152611be78185611b31565b9050611bf660c0830184611b76565b98975050505050505050565b611c0b81611b6a565b8114611c1657600080fd5b50565b600081359050611c2881611c02565b92915050565b60008060408385031215611c4557611c44611790565b5b6000611c53858286016118cb565b9250506020611c6485828601611c19565b9150509250929050565b600081905082602060030282011115611c8a57611c896117a4565b5b92915050565b60008060008060a08587031215611caa57611ca9611790565b5b6000611cb8878288016118cb565b945050602085013567ffffffffffffffff811115611cd957611cd8611795565b5b611ce5878288016117a9565b93509350506040611cf887828801611c6e565b91505092959194509250565b60008060008060008060a08789031215611d2157611d20611790565b5b6000611d2f89828a01611c19565b9650506020611d4089828a01611c19565b9550506040611d5189828a016118cb565b9450506060611d6289828a016118cb565b935050608087013567ffffffffffffffff811115611d8357611d82611795565b5b611d8f89828a0161195d565b92509250509295509295509295565b60008060408385031215611db557611db4611790565b5b6000611dc3858286016118cb565b9250506020611dd4858286016118cb565b9150509250929050565b6000604082019050611df36000830185611933565b611e006020830184611933565b9392505050565b60008083601f840112611e1d57611e1c61179a565b5b8235905067ffffffffffffffff811115611e3a57611e3961179f565b5b602083019150836020820283011115611e5657611e556117a4565b5b9250929050565b600080600080600060608688031215611e7957611e78611790565b5b6000611e87888289016118cb565b955050602086013567ffffffffffffffff811115611ea857611ea7611795565b5b611eb4888289016117a9565b9450945050604086013567ffffffffffffffff811115611ed757611ed6611795565b5b611ee388828901611e07565b92509250509295509295909350565b6000608082019050611f076000830187611a54565b611f146020830186611933565b611f216040830185611933565b611f2e6060830184611b76565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611f6d601083611ae5565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611fdd826118aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361200f5761200e611fa3565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061209b57607f821691505b6020821081036120ae576120ad612054565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120d9565b61212086836120d9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061215d612158612153846118aa565b612138565b6118aa565b9050919050565b6000819050919050565b61217783612142565b61218b61218382612164565b8484546120e6565b825550505050565b600090565b6121a0612193565b6121ab81848461216e565b505050565b5b818110156121cf576121c4600082612198565b6001810190506121b1565b5050565b601f821115612214576121e5816120b4565b6121ee846120c9565b810160208510156121fd578190505b612211612209856120c9565b8301826121b0565b50505b505050565b600082821c905092915050565b600061223760001984600802612219565b1980831691505092915050565b60006122508383612226565b9150826002028217905092915050565b61226a838361201a565b67ffffffffffffffff81111561228357612282612025565b5b61228d8254612083565b6122988282856121d3565b6000601f8311600181146122c757600084156122b5578287013590505b6122bf8582612244565b865550612327565b601f1984166122d5866120b4565b60005b828110156122fd578489013582556001820191506020850194506020810190506122d8565b8683101561231a5784890135612316601f891682612226565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000612366601183611ae5565b915061237182612330565b602082019050919050565b6000602082019050818103600083015261239581612359565b9050919050565b60006123a7826118aa565b91506123b2836118aa565b92508282019050808211156123ca576123c9611fa3565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612406602083611ae5565b9150612411826123d0565b602082019050919050565b60006020820190508181036000830152612435816123f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6124a0816118aa565b82525050565b6124af8161186c565b82525050565b6040820160008201516124cb6000850182612497565b5060208201516124de60208501826124a6565b50505050565b60006124f083836124b5565b60408301905092915050565b6000602082019050919050565b60006125148261246b565b61251e8185612476565b935061252983612487565b8060005b8381101561255a57815161254188826124e4565b975061254c836124fc565b92505060018101905061252d565b5085935050505092915050565b6000815461257481612083565b61257e8186611ae5565b9450600182166000811461259957600181146125af576125e2565b60ff1983168652811515602002860193506125e2565b6125b8856120b4565b60005b838110156125da578154818901526001820191506020810190506125bb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006126466126418361261c565b612629565b9050919050565b6000819050919050565b6126608161264d565b82525050565b600082825260208201905092915050565b6000815461268481612083565b61268e8186612666565b945060018216600081146126a957600181146126bf576126f2565b60ff1983168652811515602002860193506126f2565b6126c8856120b4565b60005b838110156126ea578154818901526001820191506020810190506126cb565b808801955050505b50505092915050565b600060408301600080840154905061271281612633565b61271f6000870182612657565b506001840185830360208701526127368382612677565b925050819250505092915050565b600061275083836126fb565b905092915050565b6000600282019050919050565b6000612770826125eb565b61277a81856125f6565b93508360208202850161278c85612607565b8060005b858110156127c7578484038952816127a88582612744565b94506127b383612758565b925060208a01995050600181019050612790565b50829750879550505050505092915050565b600060608201905081810360008301526127f38186612509565b905081810360208301526128078185612567565b9050818103604083015261281b8184612765565b9050949350505050565b600060408201905061283a6000830185611933565b6128476020830184611b76565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612888826118aa565b9150612893836118aa565b9250826128a3576128a261284e565b5b828204905092915050565b60006128b9826118aa565b91506128c4836118aa565b92508282039050818111156128dc576128db611fa3565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061290e8383612497565b60208301905092915050565b6000602082019050919050565b612930816128e2565b61293a81846128ed565b9250612945826128f8565b8060005b8381101561297657815161295d8782612902565b96506129688361291a565b925050600181019050612949565b505050505050565b6000819050919050565b60006129a361299e6129998461297e565b612138565b6118aa565b9050919050565b6129b381612988565b82525050565b600081519050919050565b600082825260208201905092915050565b60006129e0826129b9565b6129ea81856129c4565b93506129fa818560208601611af6565b612a0381611b20565b840191505092915050565b6000610140820190508181036000830152612a29818b612567565b9050612a38602083018a611933565b612a456040830189612927565b612a526080830188612927565b612a5f60c08301876129aa565b612a6c60e0830186611b76565b612a7a610100830185611b76565b818103610120830152612a8d81846129d5565b90509998505050505050505050565b600081519050612aab816118b4565b92915050565b600060208284031215612ac757612ac6611790565b5b6000612ad584828501612a9c565b91505092915050565b6000608082019050612af36000830187611933565b612b006020830186611a54565b612b0d6040830185611933565b612b1a6060830184611b76565b95945050505050565b82818337600083830152505050565b6000612b3e8385611ae5565b9350612b4b838584612b23565b612b5483611b20565b840190509392505050565b82818337505050565b612b7460608383612b5f565b5050565b600060e0820190508181036000830152612b9381888a612b32565b9050612ba26020830187611a54565b612baf6040830186612b68565b612bbc60a0830185611b76565b81810360c0830152612bce81846129d5565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612c37603183611ae5565b9150612c4282612bdb565b604082019050919050565b60006020820190508181036000830152612c6681612c2a565b9050919050565b600081519050919050565b6000819050602082019050919050565b6000612c9382611ada565b612c9d8185612666565b9350612cad818560208601611af6565b612cb681611b20565b840191505092915050565b6000604083016000830151612cd96000860182612657565b5060208301518482036020860152612cf18282612c88565b9150508091505092915050565b6000612d0a8383612cc1565b905092915050565b6000602082019050919050565b6000612d2a82612c6d565b612d3481856125f6565b935083602082028501612d4685612c78565b8060005b85811015612d825784840389528151612d638582612cfe565b9450612d6e83612d12565b925060208a01995050600181019050612d4a565b50829750879550505050505092915050565b60006060820190508181036000830152612dae8186612509565b90508181036020830152612dc28185612567565b90508181036040830152612dd68184612d1f565b9050949350505050565b50565b6000612df06000836129c4565b9150612dfb82612de0565b600082019050919050565b6000610140820190508181036000830152612e21818a612567565b9050612e306020830189611933565b612e3d6040830188612927565b612e4a6080830187612927565b612e5760c08301866129aa565b612e6460e0830185611b76565b612e72610100830184611b76565b818103610120830152612e8481612de3565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612eee603383611ae5565b9150612ef982612e92565b604082019050919050565b60006020820190508181036000830152612f1d81612ee1565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612f80602483611ae5565b9150612f8b82612f24565b604082019050919050565b60006020820190508181036000830152612faf81612f73565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612fec601883611ae5565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061307e603a83611ae5565b915061308982613022565b604082019050919050565b600060208201905081810360008301526130ad81613071565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126130df576130de6130b4565b5b80830191505092915050565b6130f48161264d565b81146130ff57600080fd5b50565b6000813561310f816130eb565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61315184613118565b9350801983169250808416831791505092915050565b600061318261317d6131788461264d565b612138565b61264d565b9050919050565b6000819050919050565b61319c82613167565b6131af6131a882613189565b8354613125565b8255505050565b600080833560016020038436030381126131d3576131d26130b4565b5b80840192508235915067ffffffffffffffff8211156131f5576131f46130b9565b5b602083019250600182023603831315613211576132106130be565b5b509250929050565b613224838383612260565b505050565b60008101600083018061323b81613102565b90506132478184613193565b505050600181016020830161325c81856131b6565b613267818386613219565b505050505050565b6132798282613229565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006132b3601a83611ae5565b91506132be8261327d565b602082019050919050565b600060208201905081810360008301526132e2816132a6565b9050919050565b60006132f4826118aa565b91506132ff836118aa565b92508261330f5761330e61284e565b5b82820690509291505056fea2646970667358221220b9d4fa7dd0ec5718d3ca0a76afa83887b6b03e1d169198a42ff584be00beab6764736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b610107600480360381019061010291906117ff565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b91906118e0565b61049e565b005b34801561013e57600080fd5b506101476105b1565b6040516101549190611942565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f91906119b3565b6105b7565b6040516101919190611942565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611a27565b610636565b6040516101d49796959493929190611b85565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611c2e565b6107c2565b005b610220600480360381019061021b9190611c90565b610c2e565b005b34801561022e57600080fd5b50610237610d77565b6040516102449190611942565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d04565b610d7d565b6040516102819190611942565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611d9e565b61112b565b005b3480156102bf57600080fd5b506102c86112a0565b6040516102d59190611942565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190611a27565b6112a6565b604051610313929190611dde565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611e5d565b6112ca565b005b34801561035157600080fd5b5061036c60048036038101906103679190611a27565b611503565b60405161037c9493929190611ef2565b60405180910390f35b34801561039157600080fd5b5061039a611560565b6040516103a79190611942565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611f83565b60405180910390fd5b60006007600081548092919061040a90611fd2565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611566565b81600301819055508383826004019182610497929190612260565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d89061237c565b60405180910390fd5b6000600560008154809291906104f690611fd2565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b919061239c565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a29190611942565b60405180910390a15050505050565b60075481565b60008083838101906105c99190611a27565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611dde565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90612083565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90612083565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90612083565b80601f016020809104026020016040519081016040528092919081815260200182805461075890612083565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec611a63565b5b8160020160009054906101000a900460ff16600381111561081157610810611a63565b5b14610851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489061241c565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561089457610893611a63565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff8111156108d2576108d1612025565b5b60405190808252806020026020018201604052801561090b57816020015b6108f8611760565b8152602001906001900390816108f05790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250816000815181106109745761097361243c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b81526004016109e2939291906127d9565b600060405180830381600087803b1580156109fc57600080fd5b505af1158015610a10573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610a45929190612825565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8660010154610a9c919061287d565b8660010154610aab91906128ae565b8660050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610af59190611942565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610b27989796959493929190612a0e565b60206040518083038185885af1158015610b45573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b6a9190612ab1565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610bf49493929190612ade565b600060405180830381600087803b158015610c0e57600080fd5b505af1158015610c22573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610c4390611fd2565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610cbd9190611942565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610ced96959493929190612b78565b60206040518083038185885af1158015610d0b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d309190612ab1565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610d679190611942565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490612c4d565b60405180910390fd5b60008383810190610e1e9190611a27565b90506000600660008381526020019081526020016000209050881580610e42575087155b15610ecd578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610e96919061287d565b9081150290604051600060405180830381858888f19350505050158015610ec1573d6000803e3d6000fd5b50600192505050611121565b60606000600167ffffffffffffffff811115610eec57610eeb612025565b5b604051908082528060200260200182016040528015610f2557816020015b610f12611760565b815260200190600190039081610f0a5790505b5090506040518060400160405280620f424081526020018460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610f8e57610f8d61243c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600401856040518463ffffffff1660e01b8152600401610ff993929190612d94565b600060405180830381600087803b15801561101357600080fd5b505af1158015611027573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8560010154611078919061287d565b856004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016110d49796959493929190612e06565b60206040518083038185885af11580156110f2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111179190612ab1565b5060009450505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90612f04565b60405180910390fd5b8060030160009054906101000a900460ff1615611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90612f96565b60405180910390fd5b806002015442111561124b57814261123e919061239c565b8160020181905550611264565b81816002015461125b919061239c565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516112939190611942565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156112f5576112f4611a63565b5b8160020160009054906101000a900460ff16600381111561131957611318611a63565b5b14611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613002565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613094565b60405180910390fd5b60018260020160006101000a81548160ff0219169083600381111561142e5761142d611a63565b5b02179055508585836005019182611446929190612260565b5060005b848490508110156114c2578260060185858381811061146c5761146b61243c565b5b905060200281019061147e91906130c3565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816114b3919061326f565b5050808060010191505061144a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516114f29190611942565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b60006115706115e5565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516115d7929190611dde565b60405180910390a150919050565b60008060005b60055481101561166c576004600082815260200190815260200160002060030160009054906101000a900460ff1661165f576004600082815260200190815260200160002060020154421161165f5760046000828152602001908152602001600020600101548261165c919061239c565b91505b80806001019150506115eb565b50600081116116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a7906132c9565b60405180910390fd5b600081446116be91906132e9565b9050600080600090505b600554811015611759576004600082815260200190815260200160002060030160009054906101000a900460ff1661174c576004600082815260200190815260200160002060020154421161174c57600460008281526020019081526020016000206001015482611739919061239c565b91508282111561174b57809450611759565b5b80806001019150506116c8565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126117bf576117be61179a565b5b8235905067ffffffffffffffff8111156117dc576117db61179f565b5b6020830191508360018202830111156117f8576117f76117a4565b5b9250929050565b6000806020838503121561181657611815611790565b5b600083013567ffffffffffffffff81111561183457611833611795565b5b611840858286016117a9565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118778261184c565b9050919050565b6118878161186c565b811461189257600080fd5b50565b6000813590506118a48161187e565b92915050565b6000819050919050565b6118bd816118aa565b81146118c857600080fd5b50565b6000813590506118da816118b4565b92915050565b6000806000606084860312156118f9576118f8611790565b5b600061190786828701611895565b9350506020611918868287016118cb565b9250506040611929868287016118cb565b9150509250925092565b61193c816118aa565b82525050565b60006020820190506119576000830184611933565b92915050565b60008083601f8401126119735761197261179a565b5b8235905067ffffffffffffffff8111156119905761198f61179f565b5b6020830191508360018202830111156119ac576119ab6117a4565b5b9250929050565b600080600080606085870312156119cd576119cc611790565b5b60006119db878288016118cb565b94505060206119ec878288016118cb565b935050604085013567ffffffffffffffff811115611a0d57611a0c611795565b5b611a198782880161195d565b925092505092959194509250565b600060208284031215611a3d57611a3c611790565b5b6000611a4b848285016118cb565b91505092915050565b611a5d8161186c565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611aa357611aa2611a63565b5b50565b6000819050611ab482611a92565b919050565b6000611ac482611aa6565b9050919050565b611ad481611ab9565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b14578082015181840152602081019050611af9565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b3c82611ada565b611b468185611ae5565b9350611b56818560208601611af6565b611b5f81611b20565b840191505092915050565b60008115159050919050565b611b7f81611b6a565b82525050565b600060e082019050611b9a600083018a611a54565b611ba76020830189611933565b611bb46040830188611acb565b611bc16060830187611933565b8181036080830152611bd38186611b31565b905081810360a0830152611be78185611b31565b9050611bf660c0830184611b76565b98975050505050505050565b611c0b81611b6a565b8114611c1657600080fd5b50565b600081359050611c2881611c02565b92915050565b60008060408385031215611c4557611c44611790565b5b6000611c53858286016118cb565b9250506020611c6485828601611c19565b9150509250929050565b600081905082602060030282011115611c8a57611c896117a4565b5b92915050565b60008060008060a08587031215611caa57611ca9611790565b5b6000611cb8878288016118cb565b945050602085013567ffffffffffffffff811115611cd957611cd8611795565b5b611ce5878288016117a9565b93509350506040611cf887828801611c6e565b91505092959194509250565b60008060008060008060a08789031215611d2157611d20611790565b5b6000611d2f89828a01611c19565b9650506020611d4089828a01611c19565b9550506040611d5189828a016118cb565b9450506060611d6289828a016118cb565b935050608087013567ffffffffffffffff811115611d8357611d82611795565b5b611d8f89828a0161195d565b92509250509295509295509295565b60008060408385031215611db557611db4611790565b5b6000611dc3858286016118cb565b9250506020611dd4858286016118cb565b9150509250929050565b6000604082019050611df36000830185611933565b611e006020830184611933565b9392505050565b60008083601f840112611e1d57611e1c61179a565b5b8235905067ffffffffffffffff811115611e3a57611e3961179f565b5b602083019150836020820283011115611e5657611e556117a4565b5b9250929050565b600080600080600060608688031215611e7957611e78611790565b5b6000611e87888289016118cb565b955050602086013567ffffffffffffffff811115611ea857611ea7611795565b5b611eb4888289016117a9565b9450945050604086013567ffffffffffffffff811115611ed757611ed6611795565b5b611ee388828901611e07565b92509250509295509295909350565b6000608082019050611f076000830187611a54565b611f146020830186611933565b611f216040830185611933565b611f2e6060830184611b76565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611f6d601083611ae5565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611fdd826118aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361200f5761200e611fa3565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061209b57607f821691505b6020821081036120ae576120ad612054565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120d9565b61212086836120d9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061215d612158612153846118aa565b612138565b6118aa565b9050919050565b6000819050919050565b61217783612142565b61218b61218382612164565b8484546120e6565b825550505050565b600090565b6121a0612193565b6121ab81848461216e565b505050565b5b818110156121cf576121c4600082612198565b6001810190506121b1565b5050565b601f821115612214576121e5816120b4565b6121ee846120c9565b810160208510156121fd578190505b612211612209856120c9565b8301826121b0565b50505b505050565b600082821c905092915050565b600061223760001984600802612219565b1980831691505092915050565b60006122508383612226565b9150826002028217905092915050565b61226a838361201a565b67ffffffffffffffff81111561228357612282612025565b5b61228d8254612083565b6122988282856121d3565b6000601f8311600181146122c757600084156122b5578287013590505b6122bf8582612244565b865550612327565b601f1984166122d5866120b4565b60005b828110156122fd578489013582556001820191506020850194506020810190506122d8565b8683101561231a5784890135612316601f891682612226565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000612366601183611ae5565b915061237182612330565b602082019050919050565b6000602082019050818103600083015261239581612359565b9050919050565b60006123a7826118aa565b91506123b2836118aa565b92508282019050808211156123ca576123c9611fa3565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612406602083611ae5565b9150612411826123d0565b602082019050919050565b60006020820190508181036000830152612435816123f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6124a0816118aa565b82525050565b6124af8161186c565b82525050565b6040820160008201516124cb6000850182612497565b5060208201516124de60208501826124a6565b50505050565b60006124f083836124b5565b60408301905092915050565b6000602082019050919050565b60006125148261246b565b61251e8185612476565b935061252983612487565b8060005b8381101561255a57815161254188826124e4565b975061254c836124fc565b92505060018101905061252d565b5085935050505092915050565b6000815461257481612083565b61257e8186611ae5565b9450600182166000811461259957600181146125af576125e2565b60ff1983168652811515602002860193506125e2565b6125b8856120b4565b60005b838110156125da578154818901526001820191506020810190506125bb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006126466126418361261c565b612629565b9050919050565b6000819050919050565b6126608161264d565b82525050565b600082825260208201905092915050565b6000815461268481612083565b61268e8186612666565b945060018216600081146126a957600181146126bf576126f2565b60ff1983168652811515602002860193506126f2565b6126c8856120b4565b60005b838110156126ea578154818901526001820191506020810190506126cb565b808801955050505b50505092915050565b600060408301600080840154905061271281612633565b61271f6000870182612657565b506001840185830360208701526127368382612677565b925050819250505092915050565b600061275083836126fb565b905092915050565b6000600282019050919050565b6000612770826125eb565b61277a81856125f6565b93508360208202850161278c85612607565b8060005b858110156127c7578484038952816127a88582612744565b94506127b383612758565b925060208a01995050600181019050612790565b50829750879550505050505092915050565b600060608201905081810360008301526127f38186612509565b905081810360208301526128078185612567565b9050818103604083015261281b8184612765565b9050949350505050565b600060408201905061283a6000830185611933565b6128476020830184611b76565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612888826118aa565b9150612893836118aa565b9250826128a3576128a261284e565b5b828204905092915050565b60006128b9826118aa565b91506128c4836118aa565b92508282039050818111156128dc576128db611fa3565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061290e8383612497565b60208301905092915050565b6000602082019050919050565b612930816128e2565b61293a81846128ed565b9250612945826128f8565b8060005b8381101561297657815161295d8782612902565b96506129688361291a565b925050600181019050612949565b505050505050565b6000819050919050565b60006129a361299e6129998461297e565b612138565b6118aa565b9050919050565b6129b381612988565b82525050565b600081519050919050565b600082825260208201905092915050565b60006129e0826129b9565b6129ea81856129c4565b93506129fa818560208601611af6565b612a0381611b20565b840191505092915050565b6000610140820190508181036000830152612a29818b612567565b9050612a38602083018a611933565b612a456040830189612927565b612a526080830188612927565b612a5f60c08301876129aa565b612a6c60e0830186611b76565b612a7a610100830185611b76565b818103610120830152612a8d81846129d5565b90509998505050505050505050565b600081519050612aab816118b4565b92915050565b600060208284031215612ac757612ac6611790565b5b6000612ad584828501612a9c565b91505092915050565b6000608082019050612af36000830187611933565b612b006020830186611a54565b612b0d6040830185611933565b612b1a6060830184611b76565b95945050505050565b82818337600083830152505050565b6000612b3e8385611ae5565b9350612b4b838584612b23565b612b5483611b20565b840190509392505050565b82818337505050565b612b7460608383612b5f565b5050565b600060e0820190508181036000830152612b9381888a612b32565b9050612ba26020830187611a54565b612baf6040830186612b68565b612bbc60a0830185611b76565b81810360c0830152612bce81846129d5565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612c37603183611ae5565b9150612c4282612bdb565b604082019050919050565b60006020820190508181036000830152612c6681612c2a565b9050919050565b600081519050919050565b6000819050602082019050919050565b6000612c9382611ada565b612c9d8185612666565b9350612cad818560208601611af6565b612cb681611b20565b840191505092915050565b6000604083016000830151612cd96000860182612657565b5060208301518482036020860152612cf18282612c88565b9150508091505092915050565b6000612d0a8383612cc1565b905092915050565b6000602082019050919050565b6000612d2a82612c6d565b612d3481856125f6565b935083602082028501612d4685612c78565b8060005b85811015612d825784840389528151612d638582612cfe565b9450612d6e83612d12565b925060208a01995050600181019050612d4a565b50829750879550505050505092915050565b60006060820190508181036000830152612dae8186612509565b90508181036020830152612dc28185612567565b90508181036040830152612dd68184612d1f565b9050949350505050565b50565b6000612df06000836129c4565b9150612dfb82612de0565b600082019050919050565b6000610140820190508181036000830152612e21818a612567565b9050612e306020830189611933565b612e3d6040830188612927565b612e4a6080830187612927565b612e5760c08301866129aa565b612e6460e0830185611b76565b612e72610100830184611b76565b818103610120830152612e8481612de3565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612eee603383611ae5565b9150612ef982612e92565b604082019050919050565b60006020820190508181036000830152612f1d81612ee1565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612f80602483611ae5565b9150612f8b82612f24565b604082019050919050565b60006020820190508181036000830152612faf81612f73565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612fec601883611ae5565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061307e603a83611ae5565b915061308982613022565b604082019050919050565b600060208201905081810360008301526130ad81613071565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126130df576130de6130b4565b5b80830191505092915050565b6130f48161264d565b81146130ff57600080fd5b50565b6000813561310f816130eb565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61315184613118565b9350801983169250808416831791505092915050565b600061318261317d6131788461264d565b612138565b61264d565b9050919050565b6000819050919050565b61319c82613167565b6131af6131a882613189565b8354613125565b8255505050565b600080833560016020038436030381126131d3576131d26130b4565b5b80840192508235915067ffffffffffffffff8211156131f5576131f46130b9565b5b602083019250600182023603831315613211576132106130be565b5b509250929050565b613224838383612260565b505050565b60008101600083018061323b81613102565b90506132478184613193565b505050600181016020830161325c81856131b6565b613267818386613219565b505050505050565b6132798282613229565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006132b3601a83611ae5565b91506132be8261327d565b602082019050919050565b600060208201905081810360008301526132e2816132a6565b9050919050565b60006132f4826118aa565b91506132ff836118aa565b92508261330f5761330e61284e565b5b82820690509291505056fea2646970667358221220b9d4fa7dd0ec5718d3ca0a76afa83887b6b03e1d169198a42ff584be00beab6764736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b50604051620036be380380620036be8339818101604052810190620000379190620001c4565b82828282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060038190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000220565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f882620000cb565b9050919050565b60006200010c82620000eb565b9050919050565b6200011e81620000ff565b81146200012a57600080fd5b50565b6000815190506200013e8162000113565b92915050565b60006200015182620000eb565b9050919050565b620001638162000144565b81146200016f57600080fd5b50565b600081519050620001838162000158565b92915050565b6000819050919050565b6200019e8162000189565b8114620001aa57600080fd5b50565b600081519050620001be8162000193565b92915050565b600080600060608486031215620001e057620001df620000c6565b5b6000620001f0868287016200012d565b9350506020620002038682870162000172565b92505060406200021686828701620001ad565b9150509250925092565b60805161345862000266600039600081816104dc01528181610a4901528181610b1901528181610c3601528181610e490152818161106301526110f501526134586000f3fe6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b61010760048036038101906101029190611883565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b9190611964565b6104da565b005b34801561013e57600080fd5b5061014761067a565b60405161015491906119c6565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f9190611a37565b610680565b60405161019191906119c6565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611aab565b6106ff565b6040516101d49796959493929190611c09565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611cb2565b61088b565b005b610220600480360381019061021b9190611d14565b610cf6565b005b34801561022e57600080fd5b50610237610e3f565b60405161024491906119c6565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d88565b610e45565b60405161028191906119c6565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611e22565b6111f3565b005b3480156102bf57600080fd5b506102c8611367565b6040516102d591906119c6565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190611aab565b61136d565b604051610313929190611e62565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611ee1565b611391565b005b34801561035157600080fd5b5061036c60048036038101906103679190611aab565b6115c9565b60405161037c9493929190611f76565b60405180910390f35b34801561039157600080fd5b5061039a611626565b6040516103a791906119c6565b60405180910390f35b6003543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90612007565b60405180910390fd5b60006007600081548092919061040a90612056565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047b61162c565b816003018190555083838260040191826104969291906122e4565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48282600301546040516104cc929190611e62565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f90612426565b60405180910390fd5b600082116105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a290612492565b60405180910390fd5b6000600160008154809291906105c090612056565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261063491906124b2565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161066b91906119c6565b60405180910390a15050505050565b60075481565b60008083838101906106929190611aab565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106e9929190611e62565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461076790612107565b80601f016020809104026020016040519081016040528092919081815260200182805461079390612107565b80156107e05780601f106107b5576101008083540402835291602001916107e0565b820191906000526020600020905b8154815290600101906020018083116107c357829003601f168201915b5050505050908060050180546107f590612107565b80601f016020809104026020016040519081016040528092919081815260200182805461082190612107565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156108b6576108b5611ae7565b5b8160020160009054906101000a900460ff1660038111156108da576108d9611ae7565b5b1461091a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091190612532565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561095c5761095b611ae7565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561099a576109996120a9565b5b6040519080825280602002602001820160405280156109d357816020015b6109c06117e4565b8152602001906001900390816109b85790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610a3c57610a3b612552565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610aaa939291906128ef565b600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610b0d92919061293b565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8660010154610b649190612993565b8660010154610b7391906129c4565b8660050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610bbd91906119c6565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610bef989796959493929190612b24565b60206040518083038185885af1158015610c0d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c329190612bc7565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610cbc9493929190612bf4565b600060405180830381600087803b158015610cd657600080fd5b505af1158015610cea573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610d0b90612056565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610d8691906119c6565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610db5959493929190612c8e565b60206040518083038185885af1158015610dd3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610df89190612bc7565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610e2f91906119c6565b60405180910390a1505050505050565b60035481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc90612d55565b60405180910390fd5b60008383810190610ee69190611aab565b90506000600660008381526020019081526020016000209050881580610f0a575087155b15610f95578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610f5e9190612993565b9081150290604051600060405180830381858888f19350505050158015610f89573d6000803e3d6000fd5b506001925050506111e9565b60606000600167ffffffffffffffff811115610fb457610fb36120a9565b5b604051908082528060200260200182016040528015610fed57816020015b610fda6117e4565b815260200190600190039081610fd25790505b5090506040518060400160405280620f424081526020018460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061105657611055612552565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600401856040518463ffffffff1660e01b81526004016110c193929190612e9c565b600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a85600101546111409190612993565b856004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b815260040161119c9796959493929190612f0e565b60206040518083038185885af11580156111ba573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111df9190612bc7565b5060009450505050505b9695505050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112929061300c565b60405180910390fd5b8060030160009054906101000a900460ff16156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e49061309e565b60405180910390fd5b806002015442111561131257814261130591906124b2565b816002018190555061132b565b81816002015461132291906124b2565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161135a91906119c6565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156113bc576113bb611ae7565b5b8160020160009054906101000a900460ff1660038111156113e0576113df611ae7565b5b14611420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114179061310a565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c39061319c565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156114f4576114f3611ae7565b5b0217905550858583600501918261150c9291906122e4565b5060005b84849050811015611588578260060185858381811061153257611531612552565b5b905060200281019061154491906131cb565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816115799190613377565b50508080600101915050611510565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516115b891906119c6565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b600061163661166f565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156116f35760008082815260200190815260200160002060030160009054906101000a900460ff166116e6576000808281526020019081526020016000206002015442116116e65760008082815260200190815260200160002060010154826116e391906124b2565b91505b8080600101915050611675565b5060008111611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e906133d1565b60405180910390fd5b6000814461174591906133f1565b9050600080600090505b6001548110156117dd5760008082815260200190815260200160002060030160009054906101000a900460ff166117d0576000808281526020019081526020016000206002015442116117d05760008082815260200190815260200160002060010154826117bd91906124b2565b9150828211156117cf578094506117dd565b5b808060010191505061174f565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126118435761184261181e565b5b8235905067ffffffffffffffff8111156118605761185f611823565b5b60208301915083600182028301111561187c5761187b611828565b5b9250929050565b6000806020838503121561189a57611899611814565b5b600083013567ffffffffffffffff8111156118b8576118b7611819565b5b6118c48582860161182d565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118fb826118d0565b9050919050565b61190b816118f0565b811461191657600080fd5b50565b60008135905061192881611902565b92915050565b6000819050919050565b6119418161192e565b811461194c57600080fd5b50565b60008135905061195e81611938565b92915050565b60008060006060848603121561197d5761197c611814565b5b600061198b86828701611919565b935050602061199c8682870161194f565b92505060406119ad8682870161194f565b9150509250925092565b6119c08161192e565b82525050565b60006020820190506119db60008301846119b7565b92915050565b60008083601f8401126119f7576119f661181e565b5b8235905067ffffffffffffffff811115611a1457611a13611823565b5b602083019150836001820283011115611a3057611a2f611828565b5b9250929050565b60008060008060608587031215611a5157611a50611814565b5b6000611a5f8782880161194f565b9450506020611a708782880161194f565b935050604085013567ffffffffffffffff811115611a9157611a90611819565b5b611a9d878288016119e1565b925092505092959194509250565b600060208284031215611ac157611ac0611814565b5b6000611acf8482850161194f565b91505092915050565b611ae1816118f0565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611b2757611b26611ae7565b5b50565b6000819050611b3882611b16565b919050565b6000611b4882611b2a565b9050919050565b611b5881611b3d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b98578082015181840152602081019050611b7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bc082611b5e565b611bca8185611b69565b9350611bda818560208601611b7a565b611be381611ba4565b840191505092915050565b60008115159050919050565b611c0381611bee565b82525050565b600060e082019050611c1e600083018a611ad8565b611c2b60208301896119b7565b611c386040830188611b4f565b611c4560608301876119b7565b8181036080830152611c578186611bb5565b905081810360a0830152611c6b8185611bb5565b9050611c7a60c0830184611bfa565b98975050505050505050565b611c8f81611bee565b8114611c9a57600080fd5b50565b600081359050611cac81611c86565b92915050565b60008060408385031215611cc957611cc8611814565b5b6000611cd78582860161194f565b9250506020611ce885828601611c9d565b9150509250929050565b600081905082602060030282011115611d0e57611d0d611828565b5b92915050565b60008060008060a08587031215611d2e57611d2d611814565b5b6000611d3c8782880161194f565b945050602085013567ffffffffffffffff811115611d5d57611d5c611819565b5b611d698782880161182d565b93509350506040611d7c87828801611cf2565b91505092959194509250565b60008060008060008060a08789031215611da557611da4611814565b5b6000611db389828a01611c9d565b9650506020611dc489828a01611c9d565b9550506040611dd589828a0161194f565b9450506060611de689828a0161194f565b935050608087013567ffffffffffffffff811115611e0757611e06611819565b5b611e1389828a016119e1565b92509250509295509295509295565b60008060408385031215611e3957611e38611814565b5b6000611e478582860161194f565b9250506020611e588582860161194f565b9150509250929050565b6000604082019050611e7760008301856119b7565b611e8460208301846119b7565b9392505050565b60008083601f840112611ea157611ea061181e565b5b8235905067ffffffffffffffff811115611ebe57611ebd611823565b5b602083019150836020820283011115611eda57611ed9611828565b5b9250929050565b600080600080600060608688031215611efd57611efc611814565b5b6000611f0b8882890161194f565b955050602086013567ffffffffffffffff811115611f2c57611f2b611819565b5b611f388882890161182d565b9450945050604086013567ffffffffffffffff811115611f5b57611f5a611819565b5b611f6788828901611e8b565b92509250509295509295909350565b6000608082019050611f8b6000830187611ad8565b611f9860208301866119b7565b611fa560408301856119b7565b611fb26060830184611bfa565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ff1601083611b69565b9150611ffc82611fbb565b602082019050919050565b6000602082019050818103600083015261202081611fe4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120618261192e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361209357612092612027565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061211f57607f821691505b602082108103612132576121316120d8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261219a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261215d565b6121a4868361215d565b95508019841693508086168417925050509392505050565b6000819050919050565b60006121e16121dc6121d78461192e565b6121bc565b61192e565b9050919050565b6000819050919050565b6121fb836121c6565b61220f612207826121e8565b84845461216a565b825550505050565b600090565b612224612217565b61222f8184846121f2565b505050565b5b818110156122535761224860008261221c565b600181019050612235565b5050565b601f8211156122985761226981612138565b6122728461214d565b81016020851015612281578190505b61229561228d8561214d565b830182612234565b50505b505050565b600082821c905092915050565b60006122bb6000198460080261229d565b1980831691505092915050565b60006122d483836122aa565b9150826002028217905092915050565b6122ee838361209e565b67ffffffffffffffff811115612307576123066120a9565b5b6123118254612107565b61231c828285612257565b6000601f83116001811461234b5760008415612339578287013590505b61234385826122c8565b8655506123ab565b601f19841661235986612138565b60005b828110156123815784890135825560018201915060208501945060208101905061235c565b8683101561239e578489013561239a601f8916826122aa565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000612410603683611b69565b915061241b826123b4565b604082019050919050565b6000602082019050818103600083015261243f81612403565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061247c601183611b69565b915061248782612446565b602082019050919050565b600060208201905081810360008301526124ab8161246f565b9050919050565b60006124bd8261192e565b91506124c88361192e565b92508282019050808211156124e0576124df612027565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061251c602083611b69565b9150612527826124e6565b602082019050919050565b6000602082019050818103600083015261254b8161250f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6125b68161192e565b82525050565b6125c5816118f0565b82525050565b6040820160008201516125e160008501826125ad565b5060208201516125f460208501826125bc565b50505050565b600061260683836125cb565b60408301905092915050565b6000602082019050919050565b600061262a82612581565b612634818561258c565b935061263f8361259d565b8060005b8381101561267057815161265788826125fa565b975061266283612612565b925050600181019050612643565b5085935050505092915050565b6000815461268a81612107565b6126948186611b69565b945060018216600081146126af57600181146126c5576126f8565b60ff1983168652811515602002860193506126f8565b6126ce85612138565b60005b838110156126f0578154818901526001820191506020810190506126d1565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061275c61275783612732565b61273f565b9050919050565b6000819050919050565b61277681612763565b82525050565b600082825260208201905092915050565b6000815461279a81612107565b6127a4818661277c565b945060018216600081146127bf57600181146127d557612808565b60ff198316865281151560200286019350612808565b6127de85612138565b60005b83811015612800578154818901526001820191506020810190506127e1565b808801955050505b50505092915050565b600060408301600080840154905061282881612749565b612835600087018261276d565b5060018401858303602087015261284c838261278d565b925050819250505092915050565b60006128668383612811565b905092915050565b6000600282019050919050565b600061288682612701565b612890818561270c565b9350836020820285016128a28561271d565b8060005b858110156128dd578484038952816128be858261285a565b94506128c98361286e565b925060208a019950506001810190506128a6565b50829750879550505050505092915050565b60006060820190508181036000830152612909818661261f565b9050818103602083015261291d818561267d565b90508181036040830152612931818461287b565b9050949350505050565b600060408201905061295060008301856119b7565b61295d6020830184611bfa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061299e8261192e565b91506129a98361192e565b9250826129b9576129b8612964565b5b828204905092915050565b60006129cf8261192e565b91506129da8361192e565b92508282039050818111156129f2576129f1612027565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612a2483836125ad565b60208301905092915050565b6000602082019050919050565b612a46816129f8565b612a508184612a03565b9250612a5b82612a0e565b8060005b83811015612a8c578151612a738782612a18565b9650612a7e83612a30565b925050600181019050612a5f565b505050505050565b6000819050919050565b6000612ab9612ab4612aaf84612a94565b6121bc565b61192e565b9050919050565b612ac981612a9e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612af682612acf565b612b008185612ada565b9350612b10818560208601611b7a565b612b1981611ba4565b840191505092915050565b6000610140820190508181036000830152612b3f818b61267d565b9050612b4e602083018a6119b7565b612b5b6040830189612a3d565b612b686080830188612a3d565b612b7560c0830187612ac0565b612b8260e0830186611bfa565b612b90610100830185611bfa565b818103610120830152612ba38184612aeb565b90509998505050505050505050565b600081519050612bc181611938565b92915050565b600060208284031215612bdd57612bdc611814565b5b6000612beb84828501612bb2565b91505092915050565b6000608082019050612c0960008301876119b7565b612c166020830186611ad8565b612c2360408301856119b7565b612c306060830184611bfa565b95945050505050565b82818337600083830152505050565b6000612c548385611b69565b9350612c61838584612c39565b612c6a83611ba4565b840190509392505050565b82818337505050565b612c8a60608383612c75565b5050565b600060c0820190508181036000830152612ca9818789612c48565b9050612cb86020830186612c7e565b612cc56080830185611bfa565b81810360a0830152612cd78184612aeb565b90509695505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612d3f603183611b69565b9150612d4a82612ce3565b604082019050919050565b60006020820190508181036000830152612d6e81612d32565b9050919050565b600081519050919050565b6000819050602082019050919050565b6000612d9b82611b5e565b612da5818561277c565b9350612db5818560208601611b7a565b612dbe81611ba4565b840191505092915050565b6000604083016000830151612de1600086018261276d565b5060208301518482036020860152612df98282612d90565b9150508091505092915050565b6000612e128383612dc9565b905092915050565b6000602082019050919050565b6000612e3282612d75565b612e3c818561270c565b935083602082028501612e4e85612d80565b8060005b85811015612e8a5784840389528151612e6b8582612e06565b9450612e7683612e1a565b925060208a01995050600181019050612e52565b50829750879550505050505092915050565b60006060820190508181036000830152612eb6818661261f565b90508181036020830152612eca818561267d565b90508181036040830152612ede8184612e27565b9050949350505050565b50565b6000612ef8600083612ada565b9150612f0382612ee8565b600082019050919050565b6000610140820190508181036000830152612f29818a61267d565b9050612f3860208301896119b7565b612f456040830188612a3d565b612f526080830187612a3d565b612f5f60c0830186612ac0565b612f6c60e0830185611bfa565b612f7a610100830184611bfa565b818103610120830152612f8c81612eeb565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612ff6603383611b69565b915061300182612f9a565b604082019050919050565b6000602082019050818103600083015261302581612fe9565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000613088602483611b69565b91506130938261302c565b604082019050919050565b600060208201905081810360008301526130b78161307b565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006130f4601883611b69565b91506130ff826130be565b602082019050919050565b60006020820190508181036000830152613123816130e7565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000613186603a83611b69565b91506131918261312a565b604082019050919050565b600060208201905081810360008301526131b581613179565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126131e7576131e66131bc565b5b80830191505092915050565b6131fc81612763565b811461320757600080fd5b50565b60008135613217816131f3565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61325984613220565b9350801983169250808416831791505092915050565b600061328a61328561328084612763565b6121bc565b612763565b9050919050565b6000819050919050565b6132a48261326f565b6132b76132b082613291565b835461322d565b8255505050565b600080833560016020038436030381126132db576132da6131bc565b5b80840192508235915067ffffffffffffffff8211156132fd576132fc6131c1565b5b602083019250600182023603831315613319576133186131c6565b5b509250929050565b61332c8383836122e4565b505050565b6000810160008301806133438161320a565b905061334f818461329b565b505050600181016020830161336481856132be565b61336f818386613321565b505050505050565b6133818282613331565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006133bb601a83611b69565b91506133c682613385565b602082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b60006133fc8261192e565b91506134078361192e565b92508261341757613416612964565b5b82820690509291505056fea26469706673582212209d81f311d7361b0a2b6d962ab9820c8f6d8913dd22ebea3bbae7d4df035bbed564736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b61010760048036038101906101029190611883565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b9190611964565b6104da565b005b34801561013e57600080fd5b5061014761067a565b60405161015491906119c6565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f9190611a37565b610680565b60405161019191906119c6565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611aab565b6106ff565b6040516101d49796959493929190611c09565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611cb2565b61088b565b005b610220600480360381019061021b9190611d14565b610cf6565b005b34801561022e57600080fd5b50610237610e3f565b60405161024491906119c6565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d88565b610e45565b60405161028191906119c6565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611e22565b6111f3565b005b3480156102bf57600080fd5b506102c8611367565b6040516102d591906119c6565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190611aab565b61136d565b604051610313929190611e62565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611ee1565b611391565b005b34801561035157600080fd5b5061036c60048036038101906103679190611aab565b6115c9565b60405161037c9493929190611f76565b60405180910390f35b34801561039157600080fd5b5061039a611626565b6040516103a791906119c6565b60405180910390f35b6003543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90612007565b60405180910390fd5b60006007600081548092919061040a90612056565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047b61162c565b816003018190555083838260040191826104969291906122e4565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48282600301546040516104cc929190611e62565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f90612426565b60405180910390fd5b600082116105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a290612492565b60405180910390fd5b6000600160008154809291906105c090612056565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261063491906124b2565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161066b91906119c6565b60405180910390a15050505050565b60075481565b60008083838101906106929190611aab565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106e9929190611e62565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461076790612107565b80601f016020809104026020016040519081016040528092919081815260200182805461079390612107565b80156107e05780601f106107b5576101008083540402835291602001916107e0565b820191906000526020600020905b8154815290600101906020018083116107c357829003601f168201915b5050505050908060050180546107f590612107565b80601f016020809104026020016040519081016040528092919081815260200182805461082190612107565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156108b6576108b5611ae7565b5b8160020160009054906101000a900460ff1660038111156108da576108d9611ae7565b5b1461091a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091190612532565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561095c5761095b611ae7565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561099a576109996120a9565b5b6040519080825280602002602001820160405280156109d357816020015b6109c06117e4565b8152602001906001900390816109b85790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610a3c57610a3b612552565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610aaa939291906128ef565b600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610b0d92919061293b565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8660010154610b649190612993565b8660010154610b7391906129c4565b8660050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610bbd91906119c6565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610bef989796959493929190612b24565b60206040518083038185885af1158015610c0d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c329190612bc7565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610cbc9493929190612bf4565b600060405180830381600087803b158015610cd657600080fd5b505af1158015610cea573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610d0b90612056565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610d8691906119c6565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610db5959493929190612c8e565b60206040518083038185885af1158015610dd3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610df89190612bc7565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610e2f91906119c6565b60405180910390a1505050505050565b60035481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc90612d55565b60405180910390fd5b60008383810190610ee69190611aab565b90506000600660008381526020019081526020016000209050881580610f0a575087155b15610f95578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610f5e9190612993565b9081150290604051600060405180830381858888f19350505050158015610f89573d6000803e3d6000fd5b506001925050506111e9565b60606000600167ffffffffffffffff811115610fb457610fb36120a9565b5b604051908082528060200260200182016040528015610fed57816020015b610fda6117e4565b815260200190600190039081610fd25790505b5090506040518060400160405280620f424081526020018460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061105657611055612552565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600401856040518463ffffffff1660e01b81526004016110c193929190612e9c565b600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a85600101546111409190612993565b856004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b815260040161119c9796959493929190612f0e565b60206040518083038185885af11580156111ba573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111df9190612bc7565b5060009450505050505b9695505050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112929061300c565b60405180910390fd5b8060030160009054906101000a900460ff16156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e49061309e565b60405180910390fd5b806002015442111561131257814261130591906124b2565b816002018190555061132b565b81816002015461132291906124b2565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161135a91906119c6565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156113bc576113bb611ae7565b5b8160020160009054906101000a900460ff1660038111156113e0576113df611ae7565b5b14611420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114179061310a565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c39061319c565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156114f4576114f3611ae7565b5b0217905550858583600501918261150c9291906122e4565b5060005b84849050811015611588578260060185858381811061153257611531612552565b5b905060200281019061154491906131cb565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816115799190613377565b50508080600101915050611510565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516115b891906119c6565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b600061163661166f565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156116f35760008082815260200190815260200160002060030160009054906101000a900460ff166116e6576000808281526020019081526020016000206002015442116116e65760008082815260200190815260200160002060010154826116e391906124b2565b91505b8080600101915050611675565b5060008111611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e906133d1565b60405180910390fd5b6000814461174591906133f1565b9050600080600090505b6001548110156117dd5760008082815260200190815260200160002060030160009054906101000a900460ff166117d0576000808281526020019081526020016000206002015442116117d05760008082815260200190815260200160002060010154826117bd91906124b2565b9150828211156117cf578094506117dd565b5b808060010191505061174f565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126118435761184261181e565b5b8235905067ffffffffffffffff8111156118605761185f611823565b5b60208301915083600182028301111561187c5761187b611828565b5b9250929050565b6000806020838503121561189a57611899611814565b5b600083013567ffffffffffffffff8111156118b8576118b7611819565b5b6118c48582860161182d565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118fb826118d0565b9050919050565b61190b816118f0565b811461191657600080fd5b50565b60008135905061192881611902565b92915050565b6000819050919050565b6119418161192e565b811461194c57600080fd5b50565b60008135905061195e81611938565b92915050565b60008060006060848603121561197d5761197c611814565b5b600061198b86828701611919565b935050602061199c8682870161194f565b92505060406119ad8682870161194f565b9150509250925092565b6119c08161192e565b82525050565b60006020820190506119db60008301846119b7565b92915050565b60008083601f8401126119f7576119f661181e565b5b8235905067ffffffffffffffff811115611a1457611a13611823565b5b602083019150836001820283011115611a3057611a2f611828565b5b9250929050565b60008060008060608587031215611a5157611a50611814565b5b6000611a5f8782880161194f565b9450506020611a708782880161194f565b935050604085013567ffffffffffffffff811115611a9157611a90611819565b5b611a9d878288016119e1565b925092505092959194509250565b600060208284031215611ac157611ac0611814565b5b6000611acf8482850161194f565b91505092915050565b611ae1816118f0565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611b2757611b26611ae7565b5b50565b6000819050611b3882611b16565b919050565b6000611b4882611b2a565b9050919050565b611b5881611b3d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b98578082015181840152602081019050611b7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bc082611b5e565b611bca8185611b69565b9350611bda818560208601611b7a565b611be381611ba4565b840191505092915050565b60008115159050919050565b611c0381611bee565b82525050565b600060e082019050611c1e600083018a611ad8565b611c2b60208301896119b7565b611c386040830188611b4f565b611c4560608301876119b7565b8181036080830152611c578186611bb5565b905081810360a0830152611c6b8185611bb5565b9050611c7a60c0830184611bfa565b98975050505050505050565b611c8f81611bee565b8114611c9a57600080fd5b50565b600081359050611cac81611c86565b92915050565b60008060408385031215611cc957611cc8611814565b5b6000611cd78582860161194f565b9250506020611ce885828601611c9d565b9150509250929050565b600081905082602060030282011115611d0e57611d0d611828565b5b92915050565b60008060008060a08587031215611d2e57611d2d611814565b5b6000611d3c8782880161194f565b945050602085013567ffffffffffffffff811115611d5d57611d5c611819565b5b611d698782880161182d565b93509350506040611d7c87828801611cf2565b91505092959194509250565b60008060008060008060a08789031215611da557611da4611814565b5b6000611db389828a01611c9d565b9650506020611dc489828a01611c9d565b9550506040611dd589828a0161194f565b9450506060611de689828a0161194f565b935050608087013567ffffffffffffffff811115611e0757611e06611819565b5b611e1389828a016119e1565b92509250509295509295509295565b60008060408385031215611e3957611e38611814565b5b6000611e478582860161194f565b9250506020611e588582860161194f565b9150509250929050565b6000604082019050611e7760008301856119b7565b611e8460208301846119b7565b9392505050565b60008083601f840112611ea157611ea061181e565b5b8235905067ffffffffffffffff811115611ebe57611ebd611823565b5b602083019150836020820283011115611eda57611ed9611828565b5b9250929050565b600080600080600060608688031215611efd57611efc611814565b5b6000611f0b8882890161194f565b955050602086013567ffffffffffffffff811115611f2c57611f2b611819565b5b611f388882890161182d565b9450945050604086013567ffffffffffffffff811115611f5b57611f5a611819565b5b611f6788828901611e8b565b92509250509295509295909350565b6000608082019050611f8b6000830187611ad8565b611f9860208301866119b7565b611fa560408301856119b7565b611fb26060830184611bfa565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ff1601083611b69565b9150611ffc82611fbb565b602082019050919050565b6000602082019050818103600083015261202081611fe4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120618261192e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361209357612092612027565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061211f57607f821691505b602082108103612132576121316120d8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261219a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261215d565b6121a4868361215d565b95508019841693508086168417925050509392505050565b6000819050919050565b60006121e16121dc6121d78461192e565b6121bc565b61192e565b9050919050565b6000819050919050565b6121fb836121c6565b61220f612207826121e8565b84845461216a565b825550505050565b600090565b612224612217565b61222f8184846121f2565b505050565b5b818110156122535761224860008261221c565b600181019050612235565b5050565b601f8211156122985761226981612138565b6122728461214d565b81016020851015612281578190505b61229561228d8561214d565b830182612234565b50505b505050565b600082821c905092915050565b60006122bb6000198460080261229d565b1980831691505092915050565b60006122d483836122aa565b9150826002028217905092915050565b6122ee838361209e565b67ffffffffffffffff811115612307576123066120a9565b5b6123118254612107565b61231c828285612257565b6000601f83116001811461234b5760008415612339578287013590505b61234385826122c8565b8655506123ab565b601f19841661235986612138565b60005b828110156123815784890135825560018201915060208501945060208101905061235c565b8683101561239e578489013561239a601f8916826122aa565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000612410603683611b69565b915061241b826123b4565b604082019050919050565b6000602082019050818103600083015261243f81612403565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061247c601183611b69565b915061248782612446565b602082019050919050565b600060208201905081810360008301526124ab8161246f565b9050919050565b60006124bd8261192e565b91506124c88361192e565b92508282019050808211156124e0576124df612027565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061251c602083611b69565b9150612527826124e6565b602082019050919050565b6000602082019050818103600083015261254b8161250f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6125b68161192e565b82525050565b6125c5816118f0565b82525050565b6040820160008201516125e160008501826125ad565b5060208201516125f460208501826125bc565b50505050565b600061260683836125cb565b60408301905092915050565b6000602082019050919050565b600061262a82612581565b612634818561258c565b935061263f8361259d565b8060005b8381101561267057815161265788826125fa565b975061266283612612565b925050600181019050612643565b5085935050505092915050565b6000815461268a81612107565b6126948186611b69565b945060018216600081146126af57600181146126c5576126f8565b60ff1983168652811515602002860193506126f8565b6126ce85612138565b60005b838110156126f0578154818901526001820191506020810190506126d1565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061275c61275783612732565b61273f565b9050919050565b6000819050919050565b61277681612763565b82525050565b600082825260208201905092915050565b6000815461279a81612107565b6127a4818661277c565b945060018216600081146127bf57600181146127d557612808565b60ff198316865281151560200286019350612808565b6127de85612138565b60005b83811015612800578154818901526001820191506020810190506127e1565b808801955050505b50505092915050565b600060408301600080840154905061282881612749565b612835600087018261276d565b5060018401858303602087015261284c838261278d565b925050819250505092915050565b60006128668383612811565b905092915050565b6000600282019050919050565b600061288682612701565b612890818561270c565b9350836020820285016128a28561271d565b8060005b858110156128dd578484038952816128be858261285a565b94506128c98361286e565b925060208a019950506001810190506128a6565b50829750879550505050505092915050565b60006060820190508181036000830152612909818661261f565b9050818103602083015261291d818561267d565b90508181036040830152612931818461287b565b9050949350505050565b600060408201905061295060008301856119b7565b61295d6020830184611bfa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061299e8261192e565b91506129a98361192e565b9250826129b9576129b8612964565b5b828204905092915050565b60006129cf8261192e565b91506129da8361192e565b92508282039050818111156129f2576129f1612027565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612a2483836125ad565b60208301905092915050565b6000602082019050919050565b612a46816129f8565b612a508184612a03565b9250612a5b82612a0e565b8060005b83811015612a8c578151612a738782612a18565b9650612a7e83612a30565b925050600181019050612a5f565b505050505050565b6000819050919050565b6000612ab9612ab4612aaf84612a94565b6121bc565b61192e565b9050919050565b612ac981612a9e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612af682612acf565b612b008185612ada565b9350612b10818560208601611b7a565b612b1981611ba4565b840191505092915050565b6000610140820190508181036000830152612b3f818b61267d565b9050612b4e602083018a6119b7565b612b5b6040830189612a3d565b612b686080830188612a3d565b612b7560c0830187612ac0565b612b8260e0830186611bfa565b612b90610100830185611bfa565b818103610120830152612ba38184612aeb565b90509998505050505050505050565b600081519050612bc181611938565b92915050565b600060208284031215612bdd57612bdc611814565b5b6000612beb84828501612bb2565b91505092915050565b6000608082019050612c0960008301876119b7565b612c166020830186611ad8565b612c2360408301856119b7565b612c306060830184611bfa565b95945050505050565b82818337600083830152505050565b6000612c548385611b69565b9350612c61838584612c39565b612c6a83611ba4565b840190509392505050565b82818337505050565b612c8a60608383612c75565b5050565b600060c0820190508181036000830152612ca9818789612c48565b9050612cb86020830186612c7e565b612cc56080830185611bfa565b81810360a0830152612cd78184612aeb565b90509695505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612d3f603183611b69565b9150612d4a82612ce3565b604082019050919050565b60006020820190508181036000830152612d6e81612d32565b9050919050565b600081519050919050565b6000819050602082019050919050565b6000612d9b82611b5e565b612da5818561277c565b9350612db5818560208601611b7a565b612dbe81611ba4565b840191505092915050565b6000604083016000830151612de1600086018261276d565b5060208301518482036020860152612df98282612d90565b9150508091505092915050565b6000612e128383612dc9565b905092915050565b6000602082019050919050565b6000612e3282612d75565b612e3c818561270c565b935083602082028501612e4e85612d80565b8060005b85811015612e8a5784840389528151612e6b8582612e06565b9450612e7683612e1a565b925060208a01995050600181019050612e52565b50829750879550505050505092915050565b60006060820190508181036000830152612eb6818661261f565b90508181036020830152612eca818561267d565b90508181036040830152612ede8184612e27565b9050949350505050565b50565b6000612ef8600083612ada565b9150612f0382612ee8565b600082019050919050565b6000610140820190508181036000830152612f29818a61267d565b9050612f3860208301896119b7565b612f456040830188612a3d565b612f526080830187612a3d565b612f5f60c0830186612ac0565b612f6c60e0830185611bfa565b612f7a610100830184611bfa565b818103610120830152612f8c81612eeb565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612ff6603383611b69565b915061300182612f9a565b604082019050919050565b6000602082019050818103600083015261302581612fe9565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000613088602483611b69565b91506130938261302c565b604082019050919050565b600060208201905081810360008301526130b78161307b565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006130f4601883611b69565b91506130ff826130be565b602082019050919050565b60006020820190508181036000830152613123816130e7565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000613186603a83611b69565b91506131918261312a565b604082019050919050565b600060208201905081810360008301526131b581613179565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126131e7576131e66131bc565b5b80830191505092915050565b6131fc81612763565b811461320757600080fd5b50565b60008135613217816131f3565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61325984613220565b9350801983169250808416831791505092915050565b600061328a61328561328084612763565b6121bc565b612763565b9050919050565b6000819050919050565b6132a48261326f565b6132b76132b082613291565b835461322d565b8255505050565b600080833560016020038436030381126132db576132da6131bc565b5b80840192508235915067ffffffffffffffff8211156132fd576132fc6131c1565b5b602083019250600182023603831315613319576133186131c6565b5b509250929050565b61332c8383836122e4565b505050565b6000810160008301806133438161320a565b905061334f818461329b565b505050600181016020830161336481856132be565b61336f818386613321565b505050505050565b6133818282613331565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006133bb601a83611b69565b91506133c682613385565b602082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b60006133fc8261192e565b91506134078361192e565b92508261341757613416612964565b5b82820690509291505056fea26469706673582212209d81f311d7361b0a2b6d962ab9820c8f6d8913dd22ebea3bbae7d4df035bbed564736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/backend/contractArtifacts/Proposals.json b/backend/contractArtifacts/Proposals.json index 233537d..60a47b6 100644 --- a/backend/contractArtifacts/Proposals.json +++ b/backend/contractArtifacts/Proposals.json @@ -299,14 +299,9 @@ "inputs": [ { "internalType": "string", - "name": "contentId", + "name": "postId", "type": "string" }, - { - "internalType": "address", - "name": "author", - "type": "address" - }, { "internalType": "uint256[3]", "name": "durations", @@ -348,8 +343,8 @@ "type": "function" } ], - "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b50604051620039d1380380620039d18339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b608051613512620004bf6000396000818161046d01528181610a0301528181610bef01528181610de901528181611685015261185301526135126000f3fe60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611b65565b610229565b6040516100bc99989796959493929190611d59565b60405180910390f35b6100df60048036038101906100da9190611f29565b6103c1565b6040516100ec9190611fe5565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611b65565b6106c7565b60405161012991906121e5565b60405180910390f35b34801561013e57600080fd5b5061015960048036038101906101549190612201565b610a00565b005b34801561016757600080fd5b50610182600480360381019061017d9190612241565b610beb565b60405161018f9190611fe5565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611b65565b6114c0565b005b3480156101cd57600080fd5b506101d66115ec565b6040516101e39190611fe5565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611b65565b6115f2565b60405161022091906122db565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e90612325565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90612325565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e90612325565b80601f016020809104026020016040519081016040528092919081815260200182805461036a90612325565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b600060606000600167ffffffffffffffff8111156103e2576103e1612356565b5b60405190808252806020026020018201604052801561041b57816020015b610408611a56565b8152602001906001900390816104005790505b5090506040518060400160405280620f424081526020018973ffffffffffffffffffffffffffffffffffffffff16815250816000815181106104605761045f612385565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d827828c8c866040518563ffffffff1660e01b81526004016104ca949392919061263f565b600060405180830381600087803b1580156104e457600080fd5b505af11580156104f8573d6000803e3d6000fd5b505050506001600081548092919061050f906126bc565b91905055925060008060008581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8a8260030191826105819291906128bb565b504281600401819055508760006003811061059f5761059e612385565b5b6020020135816008016000600381106105bb576105ba612385565b5b6011020160000181905550876001600381106105da576105d9612385565b5b6020020135816008016001600381106105f6576105f5612385565b5b60110201600001819055508760026003811061061557610614612385565b5b60200201358160080160026003811061063157610630612385565b5b6011020160000181905550348160010181905550806001015481600201819055508681603b0160006101000a81548160ff021916908315150217905550858582603c0191826106819291906129f1565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e846040516106b19190611fe5565b60405180910390a1505050979650505050505050565b6106cf611a86565b60008060008481526020019081526020016000209050806008016000600381106106fc576106fb612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156107cc578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061071a565b50505050826000600381106107e4576107e3612385565b5b60200201819052508060080160016003811061080357610802612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156108d3578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610821565b50505050826001600381106108eb576108ea612385565b5b60200201819052508060080160026003811061090a57610909612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156109da578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610928565b50505050826002600381106109f2576109f1612385565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610a5a9190612ac1565b602060405180830381865afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b9190612af1565b1015610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390612b90565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610b479190612bb0565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610ba89190612be4565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610bde9190611fe5565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290612c8a565b60405180910390fd5b60008060008585810190610c8f9190612caa565b925092509250600080600085815260200190815260200160002090506000816008018460038110610cc357610cc2612385565b5b601102019050600081600101826010015460038110610ce557610ce4612385565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610de55760048360050160006101000a81548160ff02191690836005811115610d7f57610d7e611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610db39190612d49565b60405180910390a183836002016000828254610dcf9190612be4565b92505081905550600196505050505050506114b6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e769190612af1565b8b8d610e829190612be4565b6002610e8e9190612d77565b1015905060016005811115610ea657610ea5611c72565b5b8460050160009054906101000a900460ff166005811115610eca57610ec9611c72565b5b03610feb5760008614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990612e05565b60405180910390fd5b8d8015610f1c5750805b15610f535760028460050160006101000a81548160ff02191690836005811115610f4957610f48611c72565b5b0217905550610fe6565b6002836010015410610fc85760048460050160006101000a81548160ff02191690836005811115610f8757610f86611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610fbb9190612e71565b60405180910390a1610fe5565b6001836010016000828254610fdd9190612be4565b925050819055505b5b611392565b60026005811115610fff57610ffe611c72565b5b8460050160009054906101000a900460ff16600581111561102357611022611c72565b5b03611144576001861461106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290612eeb565b60405180910390fd5b8d80156110755750805b156110ac5760038460050160006101000a81548160ff021916908360058111156110a2576110a1611c72565b5b021790555061113f565b60028360100154106111215760048460050160006101000a81548160ff021916908360058111156110e0576110df611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516111149190612e71565b60405180910390a161113e565b60018360100160008282546111369190612be4565b925050819055505b5b611391565b6003600581111561115857611157611c72565b5b8460050160009054906101000a900460ff16600581111561117c5761117b611c72565b5b0361139057600286146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb90612f57565b60405180910390fd5b8d80156111ce5750805b156112fc5760058460050160006101000a81548160ff021916908360058111156111fb576111fa611c72565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b8760405161122f9190611fe5565b60405180910390a183603b0160009054906101000a900460ff16156112f7578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b81526004016112b293929190612ffb565b6020604051808303816000875af11580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f59190612af1565b505b61138f565b60028360100154106113715760048460050160006101000a81548160ff021916908360058111156113305761132f611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516113649190612e71565b60405180910390a161138e565b60018360100160008282546113869190612be4565b925050819055505b5b5b5b5b600160058111156113a6576113a5611c72565b5b8460050160009054906101000a900460ff1660058111156113ca576113c9611c72565b5b036113f0576113eb876000600a87600101546113e69190613068565b61181e565b6114aa565b6002600581111561140457611403611c72565b5b8460050160009054906101000a900460ff16600581111561142857611427611c72565b5b0361144e57611449876001600a87600101546114449190613068565b61181e565b6114a9565b6003600581111561146257611461611c72565b5b8460050160009054906101000a900460ff16600581111561148657611485611c72565b5b036114a8576114a7876002600a87600101546114a29190613068565b61181e565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156114ea576114e9611c72565b5b8160050160009054906101000a900460ff16600581111561150e5761150d611c72565b5b148061154e575060058081111561152857611527611c72565b5b8160050160009054906101000a900460ff16600581111561154c5761154b611c72565b5b145b61158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613131565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115e6573d6000803e3d6000fd5b50505050565b60015481565b60008060008084815260200190815260200160002090506000600581111561161d5761161c611c72565b5b8160050160009054906101000a900460ff16600581111561164157611640611c72565b5b14611681576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611678906131c3565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117129190612af1565b8260070154600a6117239190612d77565b1015905060006301e13380836004015461173d9190612be4565b42119050816117c85780156117bc5760048360050160006101000a81548160ff0219169083600581111561177457611773611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516117a89190613255565b60405180910390a160009350505050611819565b60009350505050611819565b60018360050160006101000a81548160ff021916908360058111156117f0576117ef611c72565b5b0217905550611811856000600a866001015461180c9190613068565b61181e565b600193505050505b919050565b60008060008581526020019081526020016000209050818160020160008282546118489190612bb0565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7384846003018560080188600381106118a8576118a7612385565b5b6011020160000154600689600381106118c4576118c3612385565b5b60020201600c8a600381106118dc576118db612385565b5b6002020160028b600381106118f4576118f3612385565b5b015460058c6003811061190a57611909612385565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161193793929190613283565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611969989796959493929190613425565b60206040518083038185885af1158015611987573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119ac9190612af1565b905060008260080185600381106119c6576119c5612385565b5b6011020190506000816001018260100154600381106119e8576119e7612385565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611a459291906134b3565b60405180910390a150505050505050565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806003905b611a9d611ab3565b815260200190600190039081611a955790505090565b60405180606001604052806003905b611aca611ae0565b815260200190600190039081611ac25790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b611b4281611b2f565b8114611b4d57600080fd5b50565b600081359050611b5f81611b39565b92915050565b600060208284031215611b7b57611b7a611b25565b5b6000611b8984828501611b50565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bbd82611b92565b9050919050565b611bcd81611bb2565b82525050565b611bdc81611b2f565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c1c578082015181840152602081019050611c01565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c4482611be2565b611c4e8185611bed565b9350611c5e818560208601611bfe565b611c6781611c28565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611cb257611cb1611c72565b5b50565b6000819050611cc382611ca1565b919050565b6000611cd382611cb5565b9050919050565b611ce381611cc8565b82525050565b60008115159050919050565b611cfe81611ce9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611d2b82611d04565b611d358185611d0f565b9350611d45818560208601611bfe565b611d4e81611c28565b840191505092915050565b600061012082019050611d6f600083018c611bc4565b611d7c602083018b611bd3565b611d89604083018a611bd3565b8181036060830152611d9b8189611c39565b9050611daa6080830188611bd3565b611db760a0830187611cda565b611dc460c0830186611bd3565b611dd160e0830185611cf5565b818103610100830152611de48184611d20565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611e1957611e18611df4565b5b8235905067ffffffffffffffff811115611e3657611e35611df9565b5b602083019150836001820283011115611e5257611e51611dfe565b5b9250929050565b611e6281611bb2565b8114611e6d57600080fd5b50565b600081359050611e7f81611e59565b92915050565b600081905082602060030282011115611ea157611ea0611dfe565b5b92915050565b611eb081611ce9565b8114611ebb57600080fd5b50565b600081359050611ecd81611ea7565b92915050565b60008083601f840112611ee957611ee8611df4565b5b8235905067ffffffffffffffff811115611f0657611f05611df9565b5b602083019150836001820283011115611f2257611f21611dfe565b5b9250929050565b600080600080600080600060e0888a031215611f4857611f47611b25565b5b600088013567ffffffffffffffff811115611f6657611f65611b2a565b5b611f728a828b01611e03565b97509750506020611f858a828b01611e70565b9550506040611f968a828b01611e85565b94505060a0611fa78a828b01611ebe565b93505060c088013567ffffffffffffffff811115611fc857611fc7611b2a565b5b611fd48a828b01611ed3565b925092505092959891949750929550565b6000602082019050611ffa6000830184611bd3565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b61204981611b2f565b82525050565b61205881611ce9565b82525050565b60e0820160008201516120746000850182612040565b506020820151612087602085018261204f565b50604082015161209a604085018261204f565b5060608201516120ad6060850182612040565b5060808201516120c06080850182612040565b5060a08201516120d360a085018261204f565b5060c08201516120e660c085018261204f565b50505050565b60006120f8838361205e565b60e08301905092915050565b6000602082019050919050565b61211a81612020565b612124818461202b565b925061212f82612036565b8060005b8381101561216057815161214787826120ec565b965061215283612104565b925050600181019050612133565b505050505050565b60006121748383612111565b6102a08301905092915050565b6000602082019050919050565b61219781612000565b6121a1818461200b565b92506121ac82612016565b8060005b838110156121dd5781516121c48782612168565b96506121cf83612181565b9250506001810190506121b0565b505050505050565b60006107e0820190506121fb600083018461218e565b92915050565b6000806040838503121561221857612217611b25565b5b600061222685828601611b50565b925050602061223785828601611b50565b9150509250929050565b60008060008060008060a0878903121561225e5761225d611b25565b5b600061226c89828a01611ebe565b965050602061227d89828a01611ebe565b955050604061228e89828a01611b50565b945050606061229f89828a01611b50565b935050608087013567ffffffffffffffff8111156122c0576122bf611b2a565b5b6122cc89828a01611ed3565b92509250509295509295509295565b60006020820190506122f06000830184611cf5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061233d57607f821691505b6020821081036123505761234f6122f6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6123e981611bb2565b82525050565b6040820160008201516124056000850182612040565b50602082015161241860208501826123e0565b50505050565b600061242a83836123ef565b60408301905092915050565b6000602082019050919050565b600061244e826123b4565b61245881856123bf565b9350612463836123d0565b8060005b8381101561249457815161247b888261241e565b975061248683612436565b925050600181019050612467565b5085935050505092915050565b82818337600083830152505050565b60006124bc8385611bed565b93506124c98385846124a1565b6124d283611c28565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61251c81612509565b82525050565b600082825260208201905092915050565b600061253e82611be2565b6125488185612522565b9350612558818560208601611bfe565b61256181611c28565b840191505092915050565b60006040830160008301516125846000860182612513565b506020830151848203602086015261259c8282612533565b9150508091505092915050565b60006125b5838361256c565b905092915050565b6000602082019050919050565b60006125d5826124dd565b6125df81856124e8565b9350836020820285016125f1856124f9565b8060005b8581101561262d578484038952815161260e85826125a9565b9450612619836125bd565b925060208a019950506001810190506125f5565b50829750879550505050505092915050565b600060608201905081810360008301526126598187612443565b9050818103602083015261266e8185876124b0565b9050818103604083015261268281846125ca565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126c782611b2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126f9576126f861268d565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026127717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612734565b61277b8683612734565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127b86127b36127ae84611b2f565b612793565b611b2f565b9050919050565b6000819050919050565b6127d28361279d565b6127e66127de826127bf565b848454612741565b825550505050565b600090565b6127fb6127ee565b6128068184846127c9565b505050565b5b8181101561282a5761281f6000826127f3565b60018101905061280c565b5050565b601f82111561286f576128408161270f565b61284984612724565b81016020851015612858578190505b61286c61286485612724565b83018261280b565b50505b505050565b600082821c905092915050565b600061289260001984600802612874565b1980831691505092915050565b60006128ab8383612881565b9150826002028217905092915050565b6128c58383612704565b67ffffffffffffffff8111156128de576128dd612356565b5b6128e88254612325565b6128f382828561282e565b6000601f8311600181146129225760008415612910578287013590505b61291a858261289f565b865550612982565b601f1984166129308661270f565b60005b8281101561295857848901358255600182019150602085019450602081019050612933565b868310156129755784890135612971601f891682612881565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b60008190508160005260206000209050919050565b601f8211156129ec576129bd81612996565b6129c684612724565b810160208510156129d5578190505b6129e96129e185612724565b83018261280b565b50505b505050565b6129fb838361298b565b67ffffffffffffffff811115612a1457612a13612356565b5b612a1e8254612325565b612a298282856129ab565b6000601f831160018114612a585760008415612a46578287013590505b612a50858261289f565b865550612ab8565b601f198416612a6686612996565b60005b82811015612a8e57848901358255600182019150602085019450602081019050612a69565b86831015612aab5784890135612aa7601f891682612881565b8355505b6001600288020188555050505b50505050505050565b6000602082019050612ad66000830184611bc4565b92915050565b600081519050612aeb81611b39565b92915050565b600060208284031215612b0757612b06611b25565b5b6000612b1584828501612adc565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612b7a602383611bed565b9150612b8582612b1e565b604082019050919050565b60006020820190508181036000830152612ba981612b6d565b9050919050565b6000612bbb82611b2f565b9150612bc683611b2f565b9250828203905081811115612bde57612bdd61268d565b5b92915050565b6000612bef82611b2f565b9150612bfa83611b2f565b9250828201905080821115612c1257612c1161268d565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612c74603183611bed565b9150612c7f82612c18565b604082019050919050565b60006020820190508181036000830152612ca381612c67565b9050919050565b600080600060608486031215612cc357612cc2611b25565b5b6000612cd186828701611b50565b9350506020612ce286828701611b50565b9250506040612cf386828701611b50565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612d33600e83611bed565b9150612d3e82612cfd565b602082019050919050565b6000604082019050612d5e6000830184611bd3565b8181036020830152612d6f81612d26565b905092915050565b6000612d8282611b2f565b9150612d8d83611b2f565b9250828202612d9b81611b2f565b91508282048414831517612db257612db161268d565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612def601683611bed565b9150612dfa82612db9565b602082019050919050565b60006020820190508181036000830152612e1e81612de2565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612e5b601483611bed565b9150612e6682612e25565b602082019050919050565b6000604082019050612e866000830184611bd3565b8181036020830152612e9781612e4e565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612ed5601683611bed565b9150612ee082612e9f565b602082019050919050565b60006020820190508181036000830152612f0481612ec8565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612f41601683611bed565b9150612f4c82612f0b565b602082019050919050565b60006020820190508181036000830152612f7081612f34565b9050919050565b60008154612f8481612325565b612f8e8186611d0f565b94506001821660008114612fa95760018114612fbf57612ff2565b60ff198316865281151560200286019350612ff2565b612fc885612996565b60005b83811015612fea57815481890152600182019150602081019050612fcb565b808801955050505b50505092915050565b60006060820190506130106000830186611bd3565b61301d6020830185611bd3565b818103604083015261302f8184612f77565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061307382611b2f565b915061307e83611b2f565b92508261308e5761308d613039565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b600061311b604e83611bed565b915061312682613099565b606082019050919050565b6000602082019050818103600083015261314a8161310e565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b60006131ad602b83611bed565b91506131b882613151565b604082019050919050565b600060208201905081810360008301526131dc816131a0565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b600061323f602d83611bed565b915061324a826131e3565b604082019050919050565b600060408201905061326a6000830184611bd3565b818103602083015261327b81613232565b905092915050565b60006060820190506132986000830186611bd3565b6132a56020830185611bd3565b6132b26040830184611bd3565b949350505050565b600081546132c781612325565b6132d18186611bed565b945060018216600081146132ec576001811461330257613335565b60ff198316865281151560200286019350613335565b61330b8561270f565b60005b8381101561332d5781548189015260018201915060208101905061330e565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061336a8383612040565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006133a061339b83613376565b613383565b9050919050565b60006133b3825461338d565b9050919050565b6000600182019050919050565b6133d08161333e565b6133da8184613349565b92506133e582613354565b8060005b8381101561341d576133fa826133a7565b613404878261335e565b965061340f836133ba565b9250506001810190506133e9565b505050505050565b6000610140820190508181036000830152613440818b6132ba565b905061344f602083018a611bd3565b61345c60408301896133c7565b61346960808301886133c7565b61347660c0830187611bd3565b61348360e0830186611cf5565b613491610100830185611cf5565b8181036101208301526134a48184611d20565b90509998505050505050505050565b60006040820190506134c86000830185611bd3565b6134d56020830184611bd3565b939250505056fea2646970667358221220d80ec4a4a8c90b2eda72e635e77c16034d285583d86f5e11799f48eca051357c64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611b65565b610229565b6040516100bc99989796959493929190611d59565b60405180910390f35b6100df60048036038101906100da9190611f29565b6103c1565b6040516100ec9190611fe5565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611b65565b6106c7565b60405161012991906121e5565b60405180910390f35b34801561013e57600080fd5b5061015960048036038101906101549190612201565b610a00565b005b34801561016757600080fd5b50610182600480360381019061017d9190612241565b610beb565b60405161018f9190611fe5565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611b65565b6114c0565b005b3480156101cd57600080fd5b506101d66115ec565b6040516101e39190611fe5565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611b65565b6115f2565b60405161022091906122db565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e90612325565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90612325565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e90612325565b80601f016020809104026020016040519081016040528092919081815260200182805461036a90612325565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b600060606000600167ffffffffffffffff8111156103e2576103e1612356565b5b60405190808252806020026020018201604052801561041b57816020015b610408611a56565b8152602001906001900390816104005790505b5090506040518060400160405280620f424081526020018973ffffffffffffffffffffffffffffffffffffffff16815250816000815181106104605761045f612385565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d827828c8c866040518563ffffffff1660e01b81526004016104ca949392919061263f565b600060405180830381600087803b1580156104e457600080fd5b505af11580156104f8573d6000803e3d6000fd5b505050506001600081548092919061050f906126bc565b91905055925060008060008581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8a8260030191826105819291906128bb565b504281600401819055508760006003811061059f5761059e612385565b5b6020020135816008016000600381106105bb576105ba612385565b5b6011020160000181905550876001600381106105da576105d9612385565b5b6020020135816008016001600381106105f6576105f5612385565b5b60110201600001819055508760026003811061061557610614612385565b5b60200201358160080160026003811061063157610630612385565b5b6011020160000181905550348160010181905550806001015481600201819055508681603b0160006101000a81548160ff021916908315150217905550858582603c0191826106819291906129f1565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e846040516106b19190611fe5565b60405180910390a1505050979650505050505050565b6106cf611a86565b60008060008481526020019081526020016000209050806008016000600381106106fc576106fb612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156107cc578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061071a565b50505050826000600381106107e4576107e3612385565b5b60200201819052508060080160016003811061080357610802612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156108d3578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610821565b50505050826001600381106108eb576108ea612385565b5b60200201819052508060080160026003811061090a57610909612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156109da578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610928565b50505050826002600381106109f2576109f1612385565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610a5a9190612ac1565b602060405180830381865afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b9190612af1565b1015610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390612b90565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610b479190612bb0565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610ba89190612be4565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610bde9190611fe5565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290612c8a565b60405180910390fd5b60008060008585810190610c8f9190612caa565b925092509250600080600085815260200190815260200160002090506000816008018460038110610cc357610cc2612385565b5b601102019050600081600101826010015460038110610ce557610ce4612385565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610de55760048360050160006101000a81548160ff02191690836005811115610d7f57610d7e611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610db39190612d49565b60405180910390a183836002016000828254610dcf9190612be4565b92505081905550600196505050505050506114b6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e769190612af1565b8b8d610e829190612be4565b6002610e8e9190612d77565b1015905060016005811115610ea657610ea5611c72565b5b8460050160009054906101000a900460ff166005811115610eca57610ec9611c72565b5b03610feb5760008614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990612e05565b60405180910390fd5b8d8015610f1c5750805b15610f535760028460050160006101000a81548160ff02191690836005811115610f4957610f48611c72565b5b0217905550610fe6565b6002836010015410610fc85760048460050160006101000a81548160ff02191690836005811115610f8757610f86611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610fbb9190612e71565b60405180910390a1610fe5565b6001836010016000828254610fdd9190612be4565b925050819055505b5b611392565b60026005811115610fff57610ffe611c72565b5b8460050160009054906101000a900460ff16600581111561102357611022611c72565b5b03611144576001861461106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290612eeb565b60405180910390fd5b8d80156110755750805b156110ac5760038460050160006101000a81548160ff021916908360058111156110a2576110a1611c72565b5b021790555061113f565b60028360100154106111215760048460050160006101000a81548160ff021916908360058111156110e0576110df611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516111149190612e71565b60405180910390a161113e565b60018360100160008282546111369190612be4565b925050819055505b5b611391565b6003600581111561115857611157611c72565b5b8460050160009054906101000a900460ff16600581111561117c5761117b611c72565b5b0361139057600286146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb90612f57565b60405180910390fd5b8d80156111ce5750805b156112fc5760058460050160006101000a81548160ff021916908360058111156111fb576111fa611c72565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b8760405161122f9190611fe5565b60405180910390a183603b0160009054906101000a900460ff16156112f7578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b81526004016112b293929190612ffb565b6020604051808303816000875af11580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f59190612af1565b505b61138f565b60028360100154106113715760048460050160006101000a81548160ff021916908360058111156113305761132f611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516113649190612e71565b60405180910390a161138e565b60018360100160008282546113869190612be4565b925050819055505b5b5b5b5b600160058111156113a6576113a5611c72565b5b8460050160009054906101000a900460ff1660058111156113ca576113c9611c72565b5b036113f0576113eb876000600a87600101546113e69190613068565b61181e565b6114aa565b6002600581111561140457611403611c72565b5b8460050160009054906101000a900460ff16600581111561142857611427611c72565b5b0361144e57611449876001600a87600101546114449190613068565b61181e565b6114a9565b6003600581111561146257611461611c72565b5b8460050160009054906101000a900460ff16600581111561148657611485611c72565b5b036114a8576114a7876002600a87600101546114a29190613068565b61181e565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156114ea576114e9611c72565b5b8160050160009054906101000a900460ff16600581111561150e5761150d611c72565b5b148061154e575060058081111561152857611527611c72565b5b8160050160009054906101000a900460ff16600581111561154c5761154b611c72565b5b145b61158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613131565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115e6573d6000803e3d6000fd5b50505050565b60015481565b60008060008084815260200190815260200160002090506000600581111561161d5761161c611c72565b5b8160050160009054906101000a900460ff16600581111561164157611640611c72565b5b14611681576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611678906131c3565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117129190612af1565b8260070154600a6117239190612d77565b1015905060006301e13380836004015461173d9190612be4565b42119050816117c85780156117bc5760048360050160006101000a81548160ff0219169083600581111561177457611773611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516117a89190613255565b60405180910390a160009350505050611819565b60009350505050611819565b60018360050160006101000a81548160ff021916908360058111156117f0576117ef611c72565b5b0217905550611811856000600a866001015461180c9190613068565b61181e565b600193505050505b919050565b60008060008581526020019081526020016000209050818160020160008282546118489190612bb0565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7384846003018560080188600381106118a8576118a7612385565b5b6011020160000154600689600381106118c4576118c3612385565b5b60020201600c8a600381106118dc576118db612385565b5b6002020160028b600381106118f4576118f3612385565b5b015460058c6003811061190a57611909612385565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161193793929190613283565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611969989796959493929190613425565b60206040518083038185885af1158015611987573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119ac9190612af1565b905060008260080185600381106119c6576119c5612385565b5b6011020190506000816001018260100154600381106119e8576119e7612385565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611a459291906134b3565b60405180910390a150505050505050565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806003905b611a9d611ab3565b815260200190600190039081611a955790505090565b60405180606001604052806003905b611aca611ae0565b815260200190600190039081611ac25790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b611b4281611b2f565b8114611b4d57600080fd5b50565b600081359050611b5f81611b39565b92915050565b600060208284031215611b7b57611b7a611b25565b5b6000611b8984828501611b50565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bbd82611b92565b9050919050565b611bcd81611bb2565b82525050565b611bdc81611b2f565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c1c578082015181840152602081019050611c01565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c4482611be2565b611c4e8185611bed565b9350611c5e818560208601611bfe565b611c6781611c28565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611cb257611cb1611c72565b5b50565b6000819050611cc382611ca1565b919050565b6000611cd382611cb5565b9050919050565b611ce381611cc8565b82525050565b60008115159050919050565b611cfe81611ce9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611d2b82611d04565b611d358185611d0f565b9350611d45818560208601611bfe565b611d4e81611c28565b840191505092915050565b600061012082019050611d6f600083018c611bc4565b611d7c602083018b611bd3565b611d89604083018a611bd3565b8181036060830152611d9b8189611c39565b9050611daa6080830188611bd3565b611db760a0830187611cda565b611dc460c0830186611bd3565b611dd160e0830185611cf5565b818103610100830152611de48184611d20565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611e1957611e18611df4565b5b8235905067ffffffffffffffff811115611e3657611e35611df9565b5b602083019150836001820283011115611e5257611e51611dfe565b5b9250929050565b611e6281611bb2565b8114611e6d57600080fd5b50565b600081359050611e7f81611e59565b92915050565b600081905082602060030282011115611ea157611ea0611dfe565b5b92915050565b611eb081611ce9565b8114611ebb57600080fd5b50565b600081359050611ecd81611ea7565b92915050565b60008083601f840112611ee957611ee8611df4565b5b8235905067ffffffffffffffff811115611f0657611f05611df9565b5b602083019150836001820283011115611f2257611f21611dfe565b5b9250929050565b600080600080600080600060e0888a031215611f4857611f47611b25565b5b600088013567ffffffffffffffff811115611f6657611f65611b2a565b5b611f728a828b01611e03565b97509750506020611f858a828b01611e70565b9550506040611f968a828b01611e85565b94505060a0611fa78a828b01611ebe565b93505060c088013567ffffffffffffffff811115611fc857611fc7611b2a565b5b611fd48a828b01611ed3565b925092505092959891949750929550565b6000602082019050611ffa6000830184611bd3565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b61204981611b2f565b82525050565b61205881611ce9565b82525050565b60e0820160008201516120746000850182612040565b506020820151612087602085018261204f565b50604082015161209a604085018261204f565b5060608201516120ad6060850182612040565b5060808201516120c06080850182612040565b5060a08201516120d360a085018261204f565b5060c08201516120e660c085018261204f565b50505050565b60006120f8838361205e565b60e08301905092915050565b6000602082019050919050565b61211a81612020565b612124818461202b565b925061212f82612036565b8060005b8381101561216057815161214787826120ec565b965061215283612104565b925050600181019050612133565b505050505050565b60006121748383612111565b6102a08301905092915050565b6000602082019050919050565b61219781612000565b6121a1818461200b565b92506121ac82612016565b8060005b838110156121dd5781516121c48782612168565b96506121cf83612181565b9250506001810190506121b0565b505050505050565b60006107e0820190506121fb600083018461218e565b92915050565b6000806040838503121561221857612217611b25565b5b600061222685828601611b50565b925050602061223785828601611b50565b9150509250929050565b60008060008060008060a0878903121561225e5761225d611b25565b5b600061226c89828a01611ebe565b965050602061227d89828a01611ebe565b955050604061228e89828a01611b50565b945050606061229f89828a01611b50565b935050608087013567ffffffffffffffff8111156122c0576122bf611b2a565b5b6122cc89828a01611ed3565b92509250509295509295509295565b60006020820190506122f06000830184611cf5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061233d57607f821691505b6020821081036123505761234f6122f6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6123e981611bb2565b82525050565b6040820160008201516124056000850182612040565b50602082015161241860208501826123e0565b50505050565b600061242a83836123ef565b60408301905092915050565b6000602082019050919050565b600061244e826123b4565b61245881856123bf565b9350612463836123d0565b8060005b8381101561249457815161247b888261241e565b975061248683612436565b925050600181019050612467565b5085935050505092915050565b82818337600083830152505050565b60006124bc8385611bed565b93506124c98385846124a1565b6124d283611c28565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61251c81612509565b82525050565b600082825260208201905092915050565b600061253e82611be2565b6125488185612522565b9350612558818560208601611bfe565b61256181611c28565b840191505092915050565b60006040830160008301516125846000860182612513565b506020830151848203602086015261259c8282612533565b9150508091505092915050565b60006125b5838361256c565b905092915050565b6000602082019050919050565b60006125d5826124dd565b6125df81856124e8565b9350836020820285016125f1856124f9565b8060005b8581101561262d578484038952815161260e85826125a9565b9450612619836125bd565b925060208a019950506001810190506125f5565b50829750879550505050505092915050565b600060608201905081810360008301526126598187612443565b9050818103602083015261266e8185876124b0565b9050818103604083015261268281846125ca565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126c782611b2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126f9576126f861268d565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026127717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612734565b61277b8683612734565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127b86127b36127ae84611b2f565b612793565b611b2f565b9050919050565b6000819050919050565b6127d28361279d565b6127e66127de826127bf565b848454612741565b825550505050565b600090565b6127fb6127ee565b6128068184846127c9565b505050565b5b8181101561282a5761281f6000826127f3565b60018101905061280c565b5050565b601f82111561286f576128408161270f565b61284984612724565b81016020851015612858578190505b61286c61286485612724565b83018261280b565b50505b505050565b600082821c905092915050565b600061289260001984600802612874565b1980831691505092915050565b60006128ab8383612881565b9150826002028217905092915050565b6128c58383612704565b67ffffffffffffffff8111156128de576128dd612356565b5b6128e88254612325565b6128f382828561282e565b6000601f8311600181146129225760008415612910578287013590505b61291a858261289f565b865550612982565b601f1984166129308661270f565b60005b8281101561295857848901358255600182019150602085019450602081019050612933565b868310156129755784890135612971601f891682612881565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b60008190508160005260206000209050919050565b601f8211156129ec576129bd81612996565b6129c684612724565b810160208510156129d5578190505b6129e96129e185612724565b83018261280b565b50505b505050565b6129fb838361298b565b67ffffffffffffffff811115612a1457612a13612356565b5b612a1e8254612325565b612a298282856129ab565b6000601f831160018114612a585760008415612a46578287013590505b612a50858261289f565b865550612ab8565b601f198416612a6686612996565b60005b82811015612a8e57848901358255600182019150602085019450602081019050612a69565b86831015612aab5784890135612aa7601f891682612881565b8355505b6001600288020188555050505b50505050505050565b6000602082019050612ad66000830184611bc4565b92915050565b600081519050612aeb81611b39565b92915050565b600060208284031215612b0757612b06611b25565b5b6000612b1584828501612adc565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612b7a602383611bed565b9150612b8582612b1e565b604082019050919050565b60006020820190508181036000830152612ba981612b6d565b9050919050565b6000612bbb82611b2f565b9150612bc683611b2f565b9250828203905081811115612bde57612bdd61268d565b5b92915050565b6000612bef82611b2f565b9150612bfa83611b2f565b9250828201905080821115612c1257612c1161268d565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612c74603183611bed565b9150612c7f82612c18565b604082019050919050565b60006020820190508181036000830152612ca381612c67565b9050919050565b600080600060608486031215612cc357612cc2611b25565b5b6000612cd186828701611b50565b9350506020612ce286828701611b50565b9250506040612cf386828701611b50565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612d33600e83611bed565b9150612d3e82612cfd565b602082019050919050565b6000604082019050612d5e6000830184611bd3565b8181036020830152612d6f81612d26565b905092915050565b6000612d8282611b2f565b9150612d8d83611b2f565b9250828202612d9b81611b2f565b91508282048414831517612db257612db161268d565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612def601683611bed565b9150612dfa82612db9565b602082019050919050565b60006020820190508181036000830152612e1e81612de2565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612e5b601483611bed565b9150612e6682612e25565b602082019050919050565b6000604082019050612e866000830184611bd3565b8181036020830152612e9781612e4e565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612ed5601683611bed565b9150612ee082612e9f565b602082019050919050565b60006020820190508181036000830152612f0481612ec8565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612f41601683611bed565b9150612f4c82612f0b565b602082019050919050565b60006020820190508181036000830152612f7081612f34565b9050919050565b60008154612f8481612325565b612f8e8186611d0f565b94506001821660008114612fa95760018114612fbf57612ff2565b60ff198316865281151560200286019350612ff2565b612fc885612996565b60005b83811015612fea57815481890152600182019150602081019050612fcb565b808801955050505b50505092915050565b60006060820190506130106000830186611bd3565b61301d6020830185611bd3565b818103604083015261302f8184612f77565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061307382611b2f565b915061307e83611b2f565b92508261308e5761308d613039565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b600061311b604e83611bed565b915061312682613099565b606082019050919050565b6000602082019050818103600083015261314a8161310e565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b60006131ad602b83611bed565b91506131b882613151565b604082019050919050565b600060208201905081810360008301526131dc816131a0565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b600061323f602d83611bed565b915061324a826131e3565b604082019050919050565b600060408201905061326a6000830184611bd3565b818103602083015261327b81613232565b905092915050565b60006060820190506132986000830186611bd3565b6132a56020830185611bd3565b6132b26040830184611bd3565b949350505050565b600081546132c781612325565b6132d18186611bed565b945060018216600081146132ec576001811461330257613335565b60ff198316865281151560200286019350613335565b61330b8561270f565b60005b8381101561332d5781548189015260018201915060208101905061330e565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061336a8383612040565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006133a061339b83613376565b613383565b9050919050565b60006133b3825461338d565b9050919050565b6000600182019050919050565b6133d08161333e565b6133da8184613349565b92506133e582613354565b8060005b8381101561341d576133fa826133a7565b613404878261335e565b965061340f836133ba565b9250506001810190506133e9565b505050505050565b6000610140820190508181036000830152613440818b6132ba565b905061344f602083018a611bd3565b61345c60408301896133c7565b61346960808301886133c7565b61347660c0830187611bd3565b61348360e0830186611cf5565b613491610100830185611cf5565b8181036101208301526134a48184611d20565b90509998505050505050505050565b60006040820190506134c86000830185611bd3565b6134d56020830184611bd3565b939250505056fea2646970667358221220d80ec4a4a8c90b2eda72e635e77c16034d285583d86f5e11799f48eca051357c64736f6c63430008180033", + "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b5060405162003544380380620035448339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b60805161308c620004b8600039600081816106fd015281816108e901528181610ae3015281816115490152611717015261308c6000f3fe60806040526004361061007b5760003560e01c8063c019faab1161004e578063c019faab14610168578063cac152a414610191578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b1461008057806362d26ed7146100c5578063a3bb24cc14610102578063b4e6a1d51461012b575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a291906119f9565b610229565b6040516100bc99989796959493929190611bed565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e791906119f9565b6103c1565b6040516100f99190611e6d565b60405180910390f35b34801561010e57600080fd5b5061012960048036038101906101249190611e89565b6106fa565b005b34801561013757600080fd5b50610152600480360381019061014d9190611f5a565b6108e5565b60405161015f9190611ff4565b60405180910390f35b34801561017457600080fd5b5061018f600480360381019061018a91906119f9565b6111ba565b005b6101ab60048036038101906101a69190612087565b6112e6565b6040516101b89190611ff4565b60405180910390f35b3480156101cd57600080fd5b506101d66114b0565b6040516101e39190611ff4565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e91906119f9565b6114b6565b604051610220919061212e565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e90612178565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90612178565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e90612178565b80601f016020809104026020016040519081016040528092919081815260200182805461036a90612178565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b6103c961191a565b60008060008481526020019081526020016000209050806008016000600381106103f6576103f56121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156104c6578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610414565b50505050826000600381106104de576104dd6121a9565b5b6020020181905250806008016001600381106104fd576104fc6121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156105cd578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061051b565b50505050826001600381106105e5576105e46121a9565b5b602002018190525080600801600260038110610604576106036121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156106d4578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610622565b50505050826002600381106106ec576106eb6121a9565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161075491906121d8565b602060405180830381865afa158015610771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107959190612208565b10156107d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cd906122a7565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600701600082825461084191906122f6565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818160070160008282546108a2919061232a565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb836040516108d89190611ff4565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096c906123d0565b60405180910390fd5b6000806000858581019061098991906123f0565b9250925092506000806000858152602001908152602001600020905060008160080184600381106109bd576109bc6121a9565b5b6011020190506000816001018260100154600381106109df576109de6121a9565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610adf5760048360050160006101000a81548160ff02191690836005811115610a7957610a78611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610aad919061248f565b60405180910390a183836002016000828254610ac9919061232a565b92505081905550600196505050505050506111b0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b709190612208565b8b8d610b7c919061232a565b6002610b8891906124bd565b1015905060016005811115610ba057610b9f611b06565b5b8460050160009054906101000a900460ff166005811115610bc457610bc3611b06565b5b03610ce55760008614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061254b565b60405180910390fd5b8d8015610c165750805b15610c4d5760028460050160006101000a81548160ff02191690836005811115610c4357610c42611b06565b5b0217905550610ce0565b6002836010015410610cc25760048460050160006101000a81548160ff02191690836005811115610c8157610c80611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610cb591906125b7565b60405180910390a1610cdf565b6001836010016000828254610cd7919061232a565b925050819055505b5b61108c565b60026005811115610cf957610cf8611b06565b5b8460050160009054906101000a900460ff166005811115610d1d57610d1c611b06565b5b03610e3e5760018614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90612631565b60405180910390fd5b8d8015610d6f5750805b15610da65760038460050160006101000a81548160ff02191690836005811115610d9c57610d9b611b06565b5b0217905550610e39565b6002836010015410610e1b5760048460050160006101000a81548160ff02191690836005811115610dda57610dd9611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e0e91906125b7565b60405180910390a1610e38565b6001836010016000828254610e30919061232a565b925050819055505b5b61108b565b60036005811115610e5257610e51611b06565b5b8460050160009054906101000a900460ff166005811115610e7657610e75611b06565b5b0361108a5760028614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb59061269d565b60405180910390fd5b8d8015610ec85750805b15610ff65760058460050160006101000a81548160ff02191690836005811115610ef557610ef4611b06565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b87604051610f299190611ff4565b60405180910390a183603b0160009054906101000a900460ff1615610ff1578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b8152600401610fac93929190612756565b6020604051808303816000875af1158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fef9190612208565b505b611089565b600283601001541061106b5760048460050160006101000a81548160ff0219169083600581111561102a57611029611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161105e91906125b7565b60405180910390a1611088565b6001836010016000828254611080919061232a565b925050819055505b5b5b5b5b600160058111156110a05761109f611b06565b5b8460050160009054906101000a900460ff1660058111156110c4576110c3611b06565b5b036110ea576110e5876000600a87600101546110e091906127c3565b6116e2565b6111a4565b600260058111156110fe576110fd611b06565b5b8460050160009054906101000a900460ff16600581111561112257611121611b06565b5b0361114857611143876001600a876001015461113e91906127c3565b6116e2565b6111a3565b6003600581111561115c5761115b611b06565b5b8460050160009054906101000a900460ff1660058111156111805761117f611b06565b5b036111a2576111a1876002600a876001015461119c91906127c3565b6116e2565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156111e4576111e3611b06565b5b8160050160009054906101000a900460ff16600581111561120857611207611b06565b5b1480611248575060058081111561122257611221611b06565b5b8160050160009054906101000a900460ff16600581111561124657611245611b06565b5b145b611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e9061288c565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112e0573d6000803e3d6000fd5b50505050565b6000600160008154809291906112fb906128ac565b91905055905060008060008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878782600301918261136d929190612ada565b504281600401819055508560006003811061138b5761138a6121a9565b5b6020020135816008016000600381106113a7576113a66121a9565b5b6011020160000181905550856001600381106113c6576113c56121a9565b5b6020020135816008016001600381106113e2576113e16121a9565b5b601102016000018190555085600260038110611401576114006121a9565b5b60200201358160080160026003811061141d5761141c6121a9565b5b6011020160000181905550348160010181905550806001015481600201819055508481603b0160006101000a81548160ff021916908315150217905550838382603c01918261146d929190612bfb565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8260405161149d9190611ff4565b60405180910390a1509695505050505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114e1576114e0611b06565b5b8160050160009054906101000a900460ff16600581111561150557611504611b06565b5b14611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90612d3d565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190612208565b8260070154600a6115e791906124bd565b1015905060006301e133808360040154611601919061232a565b421190508161168c5780156116805760048360050160006101000a81548160ff0219169083600581111561163857611637611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8560405161166c9190612dcf565b60405180910390a1600093505050506116dd565b600093505050506116dd565b60018360050160006101000a81548160ff021916908360058111156116b4576116b3611b06565b5b02179055506116d5856000600a86600101546116d091906127c3565b6116e2565b600193505050505b919050565b600080600085815260200190815260200160002090508181600201600082825461170c91906122f6565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73848460030185600801886003811061176c5761176b6121a9565b5b601102016000015460068960038110611788576117876121a9565b5b60020201600c8a600381106117a05761179f6121a9565b5b6002020160028b600381106117b8576117b76121a9565b5b015460058c600381106117ce576117cd6121a9565b5b602091828204019190069054906101000a900460ff1660018e8e8e6040516020016117fb93929190612dfd565b6040516020818303038152906040526040518a63ffffffff1660e01b815260040161182d989796959493929190612f9f565b60206040518083038185885af115801561184b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118709190612208565b9050600082600801856003811061188a576118896121a9565b5b6011020190506000816001018260100154600381106118ac576118ab6121a9565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c673479878460405161190992919061302d565b60405180910390a150505050505050565b60405180606001604052806003905b611931611947565b8152602001906001900390816119295790505090565b60405180606001604052806003905b61195e611974565b8152602001906001900390816119565790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119d6816119c3565b81146119e157600080fd5b50565b6000813590506119f3816119cd565b92915050565b600060208284031215611a0f57611a0e6119b9565b5b6000611a1d848285016119e4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a5182611a26565b9050919050565b611a6181611a46565b82525050565b611a70816119c3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ab0578082015181840152602081019050611a95565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ad882611a76565b611ae28185611a81565b9350611af2818560208601611a92565b611afb81611abc565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611b4657611b45611b06565b5b50565b6000819050611b5782611b35565b919050565b6000611b6782611b49565b9050919050565b611b7781611b5c565b82525050565b60008115159050919050565b611b9281611b7d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611bbf82611b98565b611bc98185611ba3565b9350611bd9818560208601611a92565b611be281611abc565b840191505092915050565b600061012082019050611c03600083018c611a58565b611c10602083018b611a67565b611c1d604083018a611a67565b8181036060830152611c2f8189611acd565b9050611c3e6080830188611a67565b611c4b60a0830187611b6e565b611c5860c0830186611a67565b611c6560e0830185611b89565b818103610100830152611c788184611bb4565b90509a9950505050505050505050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611cd1816119c3565b82525050565b611ce081611b7d565b82525050565b60e082016000820151611cfc6000850182611cc8565b506020820151611d0f6020850182611cd7565b506040820151611d226040850182611cd7565b506060820151611d356060850182611cc8565b506080820151611d486080850182611cc8565b5060a0820151611d5b60a0850182611cd7565b5060c0820151611d6e60c0850182611cd7565b50505050565b6000611d808383611ce6565b60e08301905092915050565b6000602082019050919050565b611da281611ca8565b611dac8184611cb3565b9250611db782611cbe565b8060005b83811015611de8578151611dcf8782611d74565b9650611dda83611d8c565b925050600181019050611dbb565b505050505050565b6000611dfc8383611d99565b6102a08301905092915050565b6000602082019050919050565b611e1f81611c88565b611e298184611c93565b9250611e3482611c9e565b8060005b83811015611e65578151611e4c8782611df0565b9650611e5783611e09565b925050600181019050611e38565b505050505050565b60006107e082019050611e836000830184611e16565b92915050565b60008060408385031215611ea057611e9f6119b9565b5b6000611eae858286016119e4565b9250506020611ebf858286016119e4565b9150509250929050565b611ed281611b7d565b8114611edd57600080fd5b50565b600081359050611eef81611ec9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f1a57611f19611ef5565b5b8235905067ffffffffffffffff811115611f3757611f36611efa565b5b602083019150836001820283011115611f5357611f52611eff565b5b9250929050565b60008060008060008060a08789031215611f7757611f766119b9565b5b6000611f8589828a01611ee0565b9650506020611f9689828a01611ee0565b9550506040611fa789828a016119e4565b9450506060611fb889828a016119e4565b935050608087013567ffffffffffffffff811115611fd957611fd86119be565b5b611fe589828a01611f04565b92509250509295509295509295565b60006020820190506120096000830184611a67565b92915050565b60008083601f84011261202557612024611ef5565b5b8235905067ffffffffffffffff81111561204257612041611efa565b5b60208301915083600182028301111561205e5761205d611eff565b5b9250929050565b60008190508260206003028201111561208157612080611eff565b5b92915050565b60008060008060008060c087890312156120a4576120a36119b9565b5b600087013567ffffffffffffffff8111156120c2576120c16119be565b5b6120ce89828a0161200f565b965096505060206120e189828a01612065565b94505060806120f289828a01611ee0565b93505060a087013567ffffffffffffffff811115612113576121126119be565b5b61211f89828a01611f04565b92509250509295509295509295565b60006020820190506121436000830184611b89565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219057607f821691505b6020821081036121a3576121a2612149565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190506121ed6000830184611a58565b92915050565b600081519050612202816119cd565b92915050565b60006020828403121561221e5761221d6119b9565b5b600061222c848285016121f3565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612291602383611a81565b915061229c82612235565b604082019050919050565b600060208201905081810360008301526122c081612284565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612301826119c3565b915061230c836119c3565b9250828203905081811115612324576123236122c7565b5b92915050565b6000612335826119c3565b9150612340836119c3565b9250828201905080821115612358576123576122c7565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006123ba603183611a81565b91506123c58261235e565b604082019050919050565b600060208201905081810360008301526123e9816123ad565b9050919050565b600080600060608486031215612409576124086119b9565b5b6000612417868287016119e4565b9350506020612428868287016119e4565b9250506040612439868287016119e4565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612479600e83611a81565b915061248482612443565b602082019050919050565b60006040820190506124a46000830184611a67565b81810360208301526124b58161246c565b905092915050565b60006124c8826119c3565b91506124d3836119c3565b92508282026124e1816119c3565b915082820484148315176124f8576124f76122c7565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612535601683611a81565b9150612540826124ff565b602082019050919050565b6000602082019050818103600083015261256481612528565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b60006125a1601483611a81565b91506125ac8261256b565b602082019050919050565b60006040820190506125cc6000830184611a67565b81810360208301526125dd81612594565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b600061261b601683611a81565b9150612626826125e5565b602082019050919050565b6000602082019050818103600083015261264a8161260e565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612687601683611a81565b915061269282612651565b602082019050919050565b600060208201905081810360008301526126b68161267a565b9050919050565b60008190508160005260206000209050919050565b600081546126df81612178565b6126e98186611ba3565b94506001821660008114612704576001811461271a5761274d565b60ff19831686528115156020028601935061274d565b612723856126bd565b60005b8381101561274557815481890152600182019150602081019050612726565b808801955050505b50505092915050565b600060608201905061276b6000830186611a67565b6127786020830185611a67565b818103604083015261278a81846126d2565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127ce826119c3565b91506127d9836119c3565b9250826127e9576127e8612794565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612876604e83611a81565b9150612881826127f4565b606082019050919050565b600060208201905081810360008301526128a581612869565b9050919050565b60006128b7826119c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128e9576128e86122c7565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026129907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612953565b61299a8683612953565b95508019841693508086168417925050509392505050565b6000819050919050565b60006129d76129d26129cd846119c3565b6129b2565b6119c3565b9050919050565b6000819050919050565b6129f1836129bc565b612a056129fd826129de565b848454612960565b825550505050565b600090565b612a1a612a0d565b612a258184846129e8565b505050565b5b81811015612a4957612a3e600082612a12565b600181019050612a2b565b5050565b601f821115612a8e57612a5f8161292e565b612a6884612943565b81016020851015612a77578190505b612a8b612a8385612943565b830182612a2a565b50505b505050565b600082821c905092915050565b6000612ab160001984600802612a93565b1980831691505092915050565b6000612aca8383612aa0565b9150826002028217905092915050565b612ae483836128f4565b67ffffffffffffffff811115612afd57612afc6128ff565b5b612b078254612178565b612b12828285612a4d565b6000601f831160018114612b415760008415612b2f578287013590505b612b398582612abe565b865550612ba1565b601f198416612b4f8661292e565b60005b82811015612b7757848901358255600182019150602085019450602081019050612b52565b86831015612b945784890135612b90601f891682612aa0565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f821115612bf657612bc7816126bd565b612bd084612943565b81016020851015612bdf578190505b612bf3612beb85612943565b830182612a2a565b50505b505050565b612c058383612baa565b67ffffffffffffffff811115612c1e57612c1d6128ff565b5b612c288254612178565b612c33828285612bb5565b6000601f831160018114612c625760008415612c50578287013590505b612c5a8582612abe565b865550612cc2565b601f198416612c70866126bd565b60005b82811015612c9857848901358255600182019150602085019450602081019050612c73565b86831015612cb55784890135612cb1601f891682612aa0565b8355505b6001600288020188555050505b50505050505050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612d27602b83611a81565b9150612d3282612ccb565b604082019050919050565b60006020820190508181036000830152612d5681612d1a565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612db9602d83611a81565b9150612dc482612d5d565b604082019050919050565b6000604082019050612de46000830184611a67565b8181036020830152612df581612dac565b905092915050565b6000606082019050612e126000830186611a67565b612e1f6020830185611a67565b612e2c6040830184611a67565b949350505050565b60008154612e4181612178565b612e4b8186611a81565b94506001821660008114612e665760018114612e7c57612eaf565b60ff198316865281151560200286019350612eaf565b612e858561292e565b60005b83811015612ea757815481890152600182019150602081019050612e88565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612ee48383611cc8565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612f1a612f1583612ef0565b612efd565b9050919050565b6000612f2d8254612f07565b9050919050565b6000600182019050919050565b612f4a81612eb8565b612f548184612ec3565b9250612f5f82612ece565b8060005b83811015612f9757612f7482612f21565b612f7e8782612ed8565b9650612f8983612f34565b925050600181019050612f63565b505050505050565b6000610140820190508181036000830152612fba818b612e34565b9050612fc9602083018a611a67565b612fd66040830189612f41565b612fe36080830188612f41565b612ff060c0830187611a67565b612ffd60e0830186611b89565b61300b610100830185611b89565b81810361012083015261301e8184611bb4565b90509998505050505050505050565b60006040820190506130426000830185611a67565b61304f6020830184611a67565b939250505056fea2646970667358221220cbebbb046abde709d5482e1b80f77771c6a1699cb8b1fdaec3d2bd6c09368e1b64736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063c019faab1161004e578063c019faab14610168578063cac152a414610191578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b1461008057806362d26ed7146100c5578063a3bb24cc14610102578063b4e6a1d51461012b575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a291906119f9565b610229565b6040516100bc99989796959493929190611bed565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e791906119f9565b6103c1565b6040516100f99190611e6d565b60405180910390f35b34801561010e57600080fd5b5061012960048036038101906101249190611e89565b6106fa565b005b34801561013757600080fd5b50610152600480360381019061014d9190611f5a565b6108e5565b60405161015f9190611ff4565b60405180910390f35b34801561017457600080fd5b5061018f600480360381019061018a91906119f9565b6111ba565b005b6101ab60048036038101906101a69190612087565b6112e6565b6040516101b89190611ff4565b60405180910390f35b3480156101cd57600080fd5b506101d66114b0565b6040516101e39190611ff4565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e91906119f9565b6114b6565b604051610220919061212e565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e90612178565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90612178565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e90612178565b80601f016020809104026020016040519081016040528092919081815260200182805461036a90612178565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b6103c961191a565b60008060008481526020019081526020016000209050806008016000600381106103f6576103f56121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156104c6578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610414565b50505050826000600381106104de576104dd6121a9565b5b6020020181905250806008016001600381106104fd576104fc6121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156105cd578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061051b565b50505050826001600381106105e5576105e46121a9565b5b602002018190525080600801600260038110610604576106036121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156106d4578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610622565b50505050826002600381106106ec576106eb6121a9565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161075491906121d8565b602060405180830381865afa158015610771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107959190612208565b10156107d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cd906122a7565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600701600082825461084191906122f6565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818160070160008282546108a2919061232a565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb836040516108d89190611ff4565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096c906123d0565b60405180910390fd5b6000806000858581019061098991906123f0565b9250925092506000806000858152602001908152602001600020905060008160080184600381106109bd576109bc6121a9565b5b6011020190506000816001018260100154600381106109df576109de6121a9565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610adf5760048360050160006101000a81548160ff02191690836005811115610a7957610a78611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610aad919061248f565b60405180910390a183836002016000828254610ac9919061232a565b92505081905550600196505050505050506111b0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b709190612208565b8b8d610b7c919061232a565b6002610b8891906124bd565b1015905060016005811115610ba057610b9f611b06565b5b8460050160009054906101000a900460ff166005811115610bc457610bc3611b06565b5b03610ce55760008614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061254b565b60405180910390fd5b8d8015610c165750805b15610c4d5760028460050160006101000a81548160ff02191690836005811115610c4357610c42611b06565b5b0217905550610ce0565b6002836010015410610cc25760048460050160006101000a81548160ff02191690836005811115610c8157610c80611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610cb591906125b7565b60405180910390a1610cdf565b6001836010016000828254610cd7919061232a565b925050819055505b5b61108c565b60026005811115610cf957610cf8611b06565b5b8460050160009054906101000a900460ff166005811115610d1d57610d1c611b06565b5b03610e3e5760018614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90612631565b60405180910390fd5b8d8015610d6f5750805b15610da65760038460050160006101000a81548160ff02191690836005811115610d9c57610d9b611b06565b5b0217905550610e39565b6002836010015410610e1b5760048460050160006101000a81548160ff02191690836005811115610dda57610dd9611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e0e91906125b7565b60405180910390a1610e38565b6001836010016000828254610e30919061232a565b925050819055505b5b61108b565b60036005811115610e5257610e51611b06565b5b8460050160009054906101000a900460ff166005811115610e7657610e75611b06565b5b0361108a5760028614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb59061269d565b60405180910390fd5b8d8015610ec85750805b15610ff65760058460050160006101000a81548160ff02191690836005811115610ef557610ef4611b06565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b87604051610f299190611ff4565b60405180910390a183603b0160009054906101000a900460ff1615610ff1578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b8152600401610fac93929190612756565b6020604051808303816000875af1158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fef9190612208565b505b611089565b600283601001541061106b5760048460050160006101000a81548160ff0219169083600581111561102a57611029611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161105e91906125b7565b60405180910390a1611088565b6001836010016000828254611080919061232a565b925050819055505b5b5b5b5b600160058111156110a05761109f611b06565b5b8460050160009054906101000a900460ff1660058111156110c4576110c3611b06565b5b036110ea576110e5876000600a87600101546110e091906127c3565b6116e2565b6111a4565b600260058111156110fe576110fd611b06565b5b8460050160009054906101000a900460ff16600581111561112257611121611b06565b5b0361114857611143876001600a876001015461113e91906127c3565b6116e2565b6111a3565b6003600581111561115c5761115b611b06565b5b8460050160009054906101000a900460ff1660058111156111805761117f611b06565b5b036111a2576111a1876002600a876001015461119c91906127c3565b6116e2565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156111e4576111e3611b06565b5b8160050160009054906101000a900460ff16600581111561120857611207611b06565b5b1480611248575060058081111561122257611221611b06565b5b8160050160009054906101000a900460ff16600581111561124657611245611b06565b5b145b611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e9061288c565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112e0573d6000803e3d6000fd5b50505050565b6000600160008154809291906112fb906128ac565b91905055905060008060008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878782600301918261136d929190612ada565b504281600401819055508560006003811061138b5761138a6121a9565b5b6020020135816008016000600381106113a7576113a66121a9565b5b6011020160000181905550856001600381106113c6576113c56121a9565b5b6020020135816008016001600381106113e2576113e16121a9565b5b601102016000018190555085600260038110611401576114006121a9565b5b60200201358160080160026003811061141d5761141c6121a9565b5b6011020160000181905550348160010181905550806001015481600201819055508481603b0160006101000a81548160ff021916908315150217905550838382603c01918261146d929190612bfb565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8260405161149d9190611ff4565b60405180910390a1509695505050505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114e1576114e0611b06565b5b8160050160009054906101000a900460ff16600581111561150557611504611b06565b5b14611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90612d3d565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190612208565b8260070154600a6115e791906124bd565b1015905060006301e133808360040154611601919061232a565b421190508161168c5780156116805760048360050160006101000a81548160ff0219169083600581111561163857611637611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8560405161166c9190612dcf565b60405180910390a1600093505050506116dd565b600093505050506116dd565b60018360050160006101000a81548160ff021916908360058111156116b4576116b3611b06565b5b02179055506116d5856000600a86600101546116d091906127c3565b6116e2565b600193505050505b919050565b600080600085815260200190815260200160002090508181600201600082825461170c91906122f6565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73848460030185600801886003811061176c5761176b6121a9565b5b601102016000015460068960038110611788576117876121a9565b5b60020201600c8a600381106117a05761179f6121a9565b5b6002020160028b600381106117b8576117b76121a9565b5b015460058c600381106117ce576117cd6121a9565b5b602091828204019190069054906101000a900460ff1660018e8e8e6040516020016117fb93929190612dfd565b6040516020818303038152906040526040518a63ffffffff1660e01b815260040161182d989796959493929190612f9f565b60206040518083038185885af115801561184b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118709190612208565b9050600082600801856003811061188a576118896121a9565b5b6011020190506000816001018260100154600381106118ac576118ab6121a9565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c673479878460405161190992919061302d565b60405180910390a150505050505050565b60405180606001604052806003905b611931611947565b8152602001906001900390816119295790505090565b60405180606001604052806003905b61195e611974565b8152602001906001900390816119565790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119d6816119c3565b81146119e157600080fd5b50565b6000813590506119f3816119cd565b92915050565b600060208284031215611a0f57611a0e6119b9565b5b6000611a1d848285016119e4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a5182611a26565b9050919050565b611a6181611a46565b82525050565b611a70816119c3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ab0578082015181840152602081019050611a95565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ad882611a76565b611ae28185611a81565b9350611af2818560208601611a92565b611afb81611abc565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611b4657611b45611b06565b5b50565b6000819050611b5782611b35565b919050565b6000611b6782611b49565b9050919050565b611b7781611b5c565b82525050565b60008115159050919050565b611b9281611b7d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611bbf82611b98565b611bc98185611ba3565b9350611bd9818560208601611a92565b611be281611abc565b840191505092915050565b600061012082019050611c03600083018c611a58565b611c10602083018b611a67565b611c1d604083018a611a67565b8181036060830152611c2f8189611acd565b9050611c3e6080830188611a67565b611c4b60a0830187611b6e565b611c5860c0830186611a67565b611c6560e0830185611b89565b818103610100830152611c788184611bb4565b90509a9950505050505050505050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611cd1816119c3565b82525050565b611ce081611b7d565b82525050565b60e082016000820151611cfc6000850182611cc8565b506020820151611d0f6020850182611cd7565b506040820151611d226040850182611cd7565b506060820151611d356060850182611cc8565b506080820151611d486080850182611cc8565b5060a0820151611d5b60a0850182611cd7565b5060c0820151611d6e60c0850182611cd7565b50505050565b6000611d808383611ce6565b60e08301905092915050565b6000602082019050919050565b611da281611ca8565b611dac8184611cb3565b9250611db782611cbe565b8060005b83811015611de8578151611dcf8782611d74565b9650611dda83611d8c565b925050600181019050611dbb565b505050505050565b6000611dfc8383611d99565b6102a08301905092915050565b6000602082019050919050565b611e1f81611c88565b611e298184611c93565b9250611e3482611c9e565b8060005b83811015611e65578151611e4c8782611df0565b9650611e5783611e09565b925050600181019050611e38565b505050505050565b60006107e082019050611e836000830184611e16565b92915050565b60008060408385031215611ea057611e9f6119b9565b5b6000611eae858286016119e4565b9250506020611ebf858286016119e4565b9150509250929050565b611ed281611b7d565b8114611edd57600080fd5b50565b600081359050611eef81611ec9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f1a57611f19611ef5565b5b8235905067ffffffffffffffff811115611f3757611f36611efa565b5b602083019150836001820283011115611f5357611f52611eff565b5b9250929050565b60008060008060008060a08789031215611f7757611f766119b9565b5b6000611f8589828a01611ee0565b9650506020611f9689828a01611ee0565b9550506040611fa789828a016119e4565b9450506060611fb889828a016119e4565b935050608087013567ffffffffffffffff811115611fd957611fd86119be565b5b611fe589828a01611f04565b92509250509295509295509295565b60006020820190506120096000830184611a67565b92915050565b60008083601f84011261202557612024611ef5565b5b8235905067ffffffffffffffff81111561204257612041611efa565b5b60208301915083600182028301111561205e5761205d611eff565b5b9250929050565b60008190508260206003028201111561208157612080611eff565b5b92915050565b60008060008060008060c087890312156120a4576120a36119b9565b5b600087013567ffffffffffffffff8111156120c2576120c16119be565b5b6120ce89828a0161200f565b965096505060206120e189828a01612065565b94505060806120f289828a01611ee0565b93505060a087013567ffffffffffffffff811115612113576121126119be565b5b61211f89828a01611f04565b92509250509295509295509295565b60006020820190506121436000830184611b89565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219057607f821691505b6020821081036121a3576121a2612149565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190506121ed6000830184611a58565b92915050565b600081519050612202816119cd565b92915050565b60006020828403121561221e5761221d6119b9565b5b600061222c848285016121f3565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612291602383611a81565b915061229c82612235565b604082019050919050565b600060208201905081810360008301526122c081612284565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612301826119c3565b915061230c836119c3565b9250828203905081811115612324576123236122c7565b5b92915050565b6000612335826119c3565b9150612340836119c3565b9250828201905080821115612358576123576122c7565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006123ba603183611a81565b91506123c58261235e565b604082019050919050565b600060208201905081810360008301526123e9816123ad565b9050919050565b600080600060608486031215612409576124086119b9565b5b6000612417868287016119e4565b9350506020612428868287016119e4565b9250506040612439868287016119e4565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612479600e83611a81565b915061248482612443565b602082019050919050565b60006040820190506124a46000830184611a67565b81810360208301526124b58161246c565b905092915050565b60006124c8826119c3565b91506124d3836119c3565b92508282026124e1816119c3565b915082820484148315176124f8576124f76122c7565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612535601683611a81565b9150612540826124ff565b602082019050919050565b6000602082019050818103600083015261256481612528565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b60006125a1601483611a81565b91506125ac8261256b565b602082019050919050565b60006040820190506125cc6000830184611a67565b81810360208301526125dd81612594565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b600061261b601683611a81565b9150612626826125e5565b602082019050919050565b6000602082019050818103600083015261264a8161260e565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612687601683611a81565b915061269282612651565b602082019050919050565b600060208201905081810360008301526126b68161267a565b9050919050565b60008190508160005260206000209050919050565b600081546126df81612178565b6126e98186611ba3565b94506001821660008114612704576001811461271a5761274d565b60ff19831686528115156020028601935061274d565b612723856126bd565b60005b8381101561274557815481890152600182019150602081019050612726565b808801955050505b50505092915050565b600060608201905061276b6000830186611a67565b6127786020830185611a67565b818103604083015261278a81846126d2565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127ce826119c3565b91506127d9836119c3565b9250826127e9576127e8612794565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612876604e83611a81565b9150612881826127f4565b606082019050919050565b600060208201905081810360008301526128a581612869565b9050919050565b60006128b7826119c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128e9576128e86122c7565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026129907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612953565b61299a8683612953565b95508019841693508086168417925050509392505050565b6000819050919050565b60006129d76129d26129cd846119c3565b6129b2565b6119c3565b9050919050565b6000819050919050565b6129f1836129bc565b612a056129fd826129de565b848454612960565b825550505050565b600090565b612a1a612a0d565b612a258184846129e8565b505050565b5b81811015612a4957612a3e600082612a12565b600181019050612a2b565b5050565b601f821115612a8e57612a5f8161292e565b612a6884612943565b81016020851015612a77578190505b612a8b612a8385612943565b830182612a2a565b50505b505050565b600082821c905092915050565b6000612ab160001984600802612a93565b1980831691505092915050565b6000612aca8383612aa0565b9150826002028217905092915050565b612ae483836128f4565b67ffffffffffffffff811115612afd57612afc6128ff565b5b612b078254612178565b612b12828285612a4d565b6000601f831160018114612b415760008415612b2f578287013590505b612b398582612abe565b865550612ba1565b601f198416612b4f8661292e565b60005b82811015612b7757848901358255600182019150602085019450602081019050612b52565b86831015612b945784890135612b90601f891682612aa0565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f821115612bf657612bc7816126bd565b612bd084612943565b81016020851015612bdf578190505b612bf3612beb85612943565b830182612a2a565b50505b505050565b612c058383612baa565b67ffffffffffffffff811115612c1e57612c1d6128ff565b5b612c288254612178565b612c33828285612bb5565b6000601f831160018114612c625760008415612c50578287013590505b612c5a8582612abe565b865550612cc2565b601f198416612c70866126bd565b60005b82811015612c9857848901358255600182019150602085019450602081019050612c73565b86831015612cb55784890135612cb1601f891682612aa0565b8355505b6001600288020188555050505b50505050505050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612d27602b83611a81565b9150612d3282612ccb565b604082019050919050565b60006020820190508181036000830152612d5681612d1a565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612db9602d83611a81565b9150612dc482612d5d565b604082019050919050565b6000604082019050612de46000830184611a67565b8181036020830152612df581612dac565b905092915050565b6000606082019050612e126000830186611a67565b612e1f6020830185611a67565b612e2c6040830184611a67565b949350505050565b60008154612e4181612178565b612e4b8186611a81565b94506001821660008114612e665760018114612e7c57612eaf565b60ff198316865281151560200286019350612eaf565b612e858561292e565b60005b83811015612ea757815481890152600182019150602081019050612e88565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612ee48383611cc8565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612f1a612f1583612ef0565b612efd565b9050919050565b6000612f2d8254612f07565b9050919050565b6000600182019050919050565b612f4a81612eb8565b612f548184612ec3565b9250612f5f82612ece565b8060005b83811015612f9757612f7482612f21565b612f7e8782612ed8565b9650612f8983612f34565b925050600181019050612f63565b505050505050565b6000610140820190508181036000830152612fba818b612e34565b9050612fc9602083018a611a67565b612fd66040830189612f41565b612fe36080830188612f41565b612ff060c0830187611a67565b612ffd60e0830186611b89565b61300b610100830185611b89565b81810361012083015261301e8184611bb4565b90509998505050505050505050565b60006040820190506130426000830185611a67565b61304f6020830184611a67565b939250505056fea2646970667358221220cbebbb046abde709d5482e1b80f77771c6a1699cb8b1fdaec3d2bd6c09368e1b64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/backend/contractArtifacts/Rollup.json b/backend/contractArtifacts/Rollup.json new file mode 100644 index 0000000..9072afb --- /dev/null +++ b/backend/contractArtifacts/Rollup.json @@ -0,0 +1,175 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Rollup", + "sourceName": "contracts/Rollup.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract DAO", + "name": "dao", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + } + ], + "name": "AvailabilityStaked", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "acceptAvailability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "author", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "postId", + "type": "string" + } + ], + "name": "addItem", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "extendAvailability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "stakes", + "outputs": [ + { + "internalType": "address", + "name": "worker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "assigned", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "batchPostId", + "type": "string" + }, + { + "internalType": "uint256", + "name": "batchSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "poolDuration", + "type": "uint256" + } + ], + "name": "submitBatch", + "outputs": [ + { + "internalType": "uint256", + "name": "poolIndex", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162001d8a38038062001d8a8339818101604052810190620000379190620000f4565b80808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050505062000126565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a8826200007b565b9050919050565b6000620000bc826200009b565b9050919050565b620000ce81620000af565b8114620000da57600080fd5b50565b600081519050620000ee81620000c3565b92915050565b6000602082840312156200010d576200010c62000076565b5b60006200011d84828501620000dd565b91505092915050565b608051611c3362000157600039600081816101720152818161065b0152818161074401526108860152611c336000f3fe6080604052600436106100555760003560e01c8063216ed6ad1461005a578063b5b20c0014610083578063c4a9e116146100ac578063d5a44f86146100d7578063da553ec214610117578063f85c5a8a14610154575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c9190610de8565b610170565b005b34801561008f57600080fd5b506100aa60048036038101906100a59190610e3b565b610310565b005b3480156100b857600080fd5b506100c1610484565b6040516100ce9190610e8a565b60405180910390f35b3480156100e357600080fd5b506100fe60048036038101906100f99190610ea5565b61048a565b60405161010e9493929190610efc565b60405180910390f35b34801561012357600080fd5b5061013e60048036038101906101399190610fa6565b6104e7565b60405161014b9190610e8a565b60405180910390f35b61016e6004803603810190610169919061101a565b610af5565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f590611111565b60405180910390fd5b60008211610241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102389061117d565b60405180910390fd5b600060016000815480929190610256906111cc565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426102ca9190611214565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516103019190610e8a565b60405180910390a15050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af906112ba565b60405180910390fd5b8060030160009054906101000a900460ff161561040a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104019061134c565b60405180910390fd5b806002015442111561042f5781426104229190611214565b8160020181905550610448565b81816002015461043f9190611214565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516104779190610e8a565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b600060035483111561052e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610525906113b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b9061144a565b60405180910390fd5b5b600080600090505b600354811015610658576002600082815260200190815260200160002060020154826106499190611214565b9150808060010191505061061d565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382888887604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b81526004016106f09897969594939291906115de565b60206040518083038185885af115801561070e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107339190611681565b915060005b60035481101561082d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846002600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206001015460016040518563ffffffff1660e01b81526004016107ee94939291906116ae565b600060405180830381600087803b15801561080857600080fd5b505af115801561081c573d6000803e3d6000fd5b505050508080600101915050610738565b50600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610950577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060055481526020019081526020016000206001015460016040518563ffffffff1660e01b815260040161091d94939291906116ae565b600060405180830381600087803b15801561093757600080fd5b505af115801561094b573d6000803e3d6000fd5b505050505b600354841015610a5d5760005b8460035461096b91906116f3565b811015610a43576002600082876109829190611214565b8152602001908152602001600020600260008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015560038201816003019081610a32919061196e565b50905050808060010191505061095d565b5083600354610a5291906116f3565b600381905550610a66565b60006003819055505b610a6e610b92565b600581905550600080600554815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050949350505050565b60006002600060036000815480929190610b0e906111cc565b9190505581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600101819055503481600201819055508282826003019182610b8a929190611a61565b505050505050565b6000610b9c610bd5565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b600154811015610c595760008082815260200190815260200160002060030160009054906101000a900460ff16610c4c57600080828152602001908152602001600020600201544211610c4c576000808281526020019081526020016000206001015482610c499190611214565b91505b8080600101915050610bdb565b5060008111610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490611b7d565b60405180910390fd5b60008144610cab9190611bcc565b9050600080600090505b600154811015610d435760008082815260200190815260200160002060030160009054906101000a900460ff16610d3657600080828152602001908152602001600020600201544211610d36576000808281526020019081526020016000206001015482610d239190611214565b915082821115610d3557809450610d43565b5b8080600101915050610cb5565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d7f82610d54565b9050919050565b610d8f81610d74565b8114610d9a57600080fd5b50565b600081359050610dac81610d86565b92915050565b6000819050919050565b610dc581610db2565b8114610dd057600080fd5b50565b600081359050610de281610dbc565b92915050565b600080600060608486031215610e0157610e00610d4a565b5b6000610e0f86828701610d9d565b9350506020610e2086828701610dd3565b9250506040610e3186828701610dd3565b9150509250925092565b60008060408385031215610e5257610e51610d4a565b5b6000610e6085828601610dd3565b9250506020610e7185828601610dd3565b9150509250929050565b610e8481610db2565b82525050565b6000602082019050610e9f6000830184610e7b565b92915050565b600060208284031215610ebb57610eba610d4a565b5b6000610ec984828501610dd3565b91505092915050565b610edb81610d74565b82525050565b60008115159050919050565b610ef681610ee1565b82525050565b6000608082019050610f116000830187610ed2565b610f1e6020830186610e7b565b610f2b6040830185610e7b565b610f386060830184610eed565b95945050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112610f6657610f65610f41565b5b8235905067ffffffffffffffff811115610f8357610f82610f46565b5b602083019150836001820283011115610f9f57610f9e610f4b565b5b9250929050565b60008060008060608587031215610fc057610fbf610d4a565b5b600085013567ffffffffffffffff811115610fde57610fdd610d4f565b5b610fea87828801610f50565b94509450506020610ffd87828801610dd3565b925050604061100e87828801610dd3565b91505092959194509250565b6000806000806060858703121561103457611033610d4a565b5b600061104287828801610d9d565b945050602061105387828801610dd3565b935050604085013567ffffffffffffffff81111561107457611073610d4f565b5b61108087828801610f50565b925092505092959194509250565b600082825260208201905092915050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b60006110fb60368361108e565b91506111068261109f565b604082019050919050565b6000602082019050818103600083015261112a816110ee565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061116760118361108e565b915061117282611131565b602082019050919050565b600060208201905081810360008301526111968161115a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006111d782610db2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112095761120861119d565b5b600182019050919050565b600061121f82610db2565b915061122a83610db2565b92508282019050808211156112425761124161119d565b5b92915050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006112a460338361108e565b91506112af82611248565b604082019050919050565b600060208201905081810360008301526112d381611297565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061133660248361108e565b9150611341826112da565b604082019050919050565b6000602082019050818103600083015261136581611329565b9050919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b60006113a260148361108e565b91506113ad8261136c565b602082019050919050565b600060208201905081810360008301526113d181611395565b9050919050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b600061143460368361108e565b915061143f826113d8565b604082019050919050565b6000602082019050818103600083015261146381611427565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611496838561108e565b93506114a383858461146a565b6114ac83611479565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b6114e081610db2565b82525050565b60006114f283836114d7565b60208301905092915050565b6000602082019050919050565b611514816114b7565b61151e81846114c2565b9250611529826114cd565b8060005b8381101561155a57815161154187826114e6565b965061154c836114fe565b92505060018101905061152d565b505050505050565b6000819050919050565b6000819050919050565b600061159161158c61158784611562565b61156c565b610db2565b9050919050565b6115a181611576565b82525050565b600082825260208201905092915050565b50565b60006115c86000836115a7565b91506115d3826115b8565b600082019050919050565b60006101408201905081810360008301526115fa818a8c61148a565b90506116096020830189610e7b565b611616604083018861150b565b611623608083018761150b565b61163060c0830186611598565b61163d60e0830185610eed565b61164b610100830184610eed565b81810361012083015261165d816115bb565b90509998505050505050505050565b60008151905061167b81610dbc565b92915050565b60006020828403121561169757611696610d4a565b5b60006116a58482850161166c565b91505092915050565b60006080820190506116c36000830187610e7b565b6116d06020830186610ed2565b6116dd6040830185610e7b565b6116ea6060830184610eed565b95945050505050565b60006116fe82610db2565b915061170983610db2565b92508282039050818111156117215761172061119d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061176e57607f821691505b60208210810361178157611780611727565b5b50919050565b60008154905061179681611756565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261182e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826117f1565b61183886836117f1565b95508019841693508086168417925050509392505050565b600061186b61186661186184610db2565b61156c565b610db2565b9050919050565b6000819050919050565b61188583611850565b61189961189182611872565b8484546117fe565b825550505050565b600090565b6118ae6118a1565b6118b981848461187c565b505050565b5b818110156118dd576118d26000826118a6565b6001810190506118bf565b5050565b601f821115611922576118f3816117cc565b6118fc846117e1565b8101602085101561190b578190505b61191f611917856117e1565b8301826118be565b50505b505050565b600082821c905092915050565b600061194560001984600802611927565b1980831691505092915050565b600061195e8383611934565b9150826002028217905092915050565b81810361197c575050611a54565b61198582611787565b67ffffffffffffffff81111561199e5761199d61179d565b5b6119a88254611756565b6119b38282856118e1565b6000601f8311600181146119e257600084156119d0578287015490505b6119da8582611952565b865550611a4d565b601f1984166119f0876117cc565b96506119fb866117cc565b60005b82811015611a23578489015482556001820191506001850194506020810190506119fe565b86831015611a405784890154611a3c601f891682611934565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b611a6b8383611a56565b67ffffffffffffffff811115611a8457611a8361179d565b5b611a8e8254611756565b611a998282856118e1565b6000601f831160018114611ac85760008415611ab6578287013590505b611ac08582611952565b865550611b28565b601f198416611ad6866117cc565b60005b82811015611afe57848901358255600182019150602085019450602081019050611ad9565b86831015611b1b5784890135611b17601f891682611934565b8355505b6001600288020188555050505b50505050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611b67601a8361108e565b9150611b7282611b31565b602082019050919050565b60006020820190508181036000830152611b9681611b5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bd782610db2565b9150611be283610db2565b925082611bf257611bf1611b9d565b5b82820690509291505056fea264697066735822122030f2ec404048094849430ab773dd99f12ad2a075efa05bd6af8d0466b56a8de164736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100555760003560e01c8063216ed6ad1461005a578063b5b20c0014610083578063c4a9e116146100ac578063d5a44f86146100d7578063da553ec214610117578063f85c5a8a14610154575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c9190610de8565b610170565b005b34801561008f57600080fd5b506100aa60048036038101906100a59190610e3b565b610310565b005b3480156100b857600080fd5b506100c1610484565b6040516100ce9190610e8a565b60405180910390f35b3480156100e357600080fd5b506100fe60048036038101906100f99190610ea5565b61048a565b60405161010e9493929190610efc565b60405180910390f35b34801561012357600080fd5b5061013e60048036038101906101399190610fa6565b6104e7565b60405161014b9190610e8a565b60405180910390f35b61016e6004803603810190610169919061101a565b610af5565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f590611111565b60405180910390fd5b60008211610241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102389061117d565b60405180910390fd5b600060016000815480929190610256906111cc565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426102ca9190611214565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516103019190610e8a565b60405180910390a15050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af906112ba565b60405180910390fd5b8060030160009054906101000a900460ff161561040a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104019061134c565b60405180910390fd5b806002015442111561042f5781426104229190611214565b8160020181905550610448565b81816002015461043f9190611214565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516104779190610e8a565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b600060035483111561052e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610525906113b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b9061144a565b60405180910390fd5b5b600080600090505b600354811015610658576002600082815260200190815260200160002060020154826106499190611214565b9150808060010191505061061d565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382888887604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b81526004016106f09897969594939291906115de565b60206040518083038185885af115801561070e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107339190611681565b915060005b60035481101561082d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846002600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206001015460016040518563ffffffff1660e01b81526004016107ee94939291906116ae565b600060405180830381600087803b15801561080857600080fd5b505af115801561081c573d6000803e3d6000fd5b505050508080600101915050610738565b50600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610950577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060055481526020019081526020016000206001015460016040518563ffffffff1660e01b815260040161091d94939291906116ae565b600060405180830381600087803b15801561093757600080fd5b505af115801561094b573d6000803e3d6000fd5b505050505b600354841015610a5d5760005b8460035461096b91906116f3565b811015610a43576002600082876109829190611214565b8152602001908152602001600020600260008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015560038201816003019081610a32919061196e565b50905050808060010191505061095d565b5083600354610a5291906116f3565b600381905550610a66565b60006003819055505b610a6e610b92565b600581905550600080600554815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050949350505050565b60006002600060036000815480929190610b0e906111cc565b9190505581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600101819055503481600201819055508282826003019182610b8a929190611a61565b505050505050565b6000610b9c610bd5565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b600154811015610c595760008082815260200190815260200160002060030160009054906101000a900460ff16610c4c57600080828152602001908152602001600020600201544211610c4c576000808281526020019081526020016000206001015482610c499190611214565b91505b8080600101915050610bdb565b5060008111610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490611b7d565b60405180910390fd5b60008144610cab9190611bcc565b9050600080600090505b600154811015610d435760008082815260200190815260200160002060030160009054906101000a900460ff16610d3657600080828152602001908152602001600020600201544211610d36576000808281526020019081526020016000206001015482610d239190611214565b915082821115610d3557809450610d43565b5b8080600101915050610cb5565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d7f82610d54565b9050919050565b610d8f81610d74565b8114610d9a57600080fd5b50565b600081359050610dac81610d86565b92915050565b6000819050919050565b610dc581610db2565b8114610dd057600080fd5b50565b600081359050610de281610dbc565b92915050565b600080600060608486031215610e0157610e00610d4a565b5b6000610e0f86828701610d9d565b9350506020610e2086828701610dd3565b9250506040610e3186828701610dd3565b9150509250925092565b60008060408385031215610e5257610e51610d4a565b5b6000610e6085828601610dd3565b9250506020610e7185828601610dd3565b9150509250929050565b610e8481610db2565b82525050565b6000602082019050610e9f6000830184610e7b565b92915050565b600060208284031215610ebb57610eba610d4a565b5b6000610ec984828501610dd3565b91505092915050565b610edb81610d74565b82525050565b60008115159050919050565b610ef681610ee1565b82525050565b6000608082019050610f116000830187610ed2565b610f1e6020830186610e7b565b610f2b6040830185610e7b565b610f386060830184610eed565b95945050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112610f6657610f65610f41565b5b8235905067ffffffffffffffff811115610f8357610f82610f46565b5b602083019150836001820283011115610f9f57610f9e610f4b565b5b9250929050565b60008060008060608587031215610fc057610fbf610d4a565b5b600085013567ffffffffffffffff811115610fde57610fdd610d4f565b5b610fea87828801610f50565b94509450506020610ffd87828801610dd3565b925050604061100e87828801610dd3565b91505092959194509250565b6000806000806060858703121561103457611033610d4a565b5b600061104287828801610d9d565b945050602061105387828801610dd3565b935050604085013567ffffffffffffffff81111561107457611073610d4f565b5b61108087828801610f50565b925092505092959194509250565b600082825260208201905092915050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b60006110fb60368361108e565b91506111068261109f565b604082019050919050565b6000602082019050818103600083015261112a816110ee565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061116760118361108e565b915061117282611131565b602082019050919050565b600060208201905081810360008301526111968161115a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006111d782610db2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112095761120861119d565b5b600182019050919050565b600061121f82610db2565b915061122a83610db2565b92508282019050808211156112425761124161119d565b5b92915050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006112a460338361108e565b91506112af82611248565b604082019050919050565b600060208201905081810360008301526112d381611297565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061133660248361108e565b9150611341826112da565b604082019050919050565b6000602082019050818103600083015261136581611329565b9050919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b60006113a260148361108e565b91506113ad8261136c565b602082019050919050565b600060208201905081810360008301526113d181611395565b9050919050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b600061143460368361108e565b915061143f826113d8565b604082019050919050565b6000602082019050818103600083015261146381611427565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611496838561108e565b93506114a383858461146a565b6114ac83611479565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b6114e081610db2565b82525050565b60006114f283836114d7565b60208301905092915050565b6000602082019050919050565b611514816114b7565b61151e81846114c2565b9250611529826114cd565b8060005b8381101561155a57815161154187826114e6565b965061154c836114fe565b92505060018101905061152d565b505050505050565b6000819050919050565b6000819050919050565b600061159161158c61158784611562565b61156c565b610db2565b9050919050565b6115a181611576565b82525050565b600082825260208201905092915050565b50565b60006115c86000836115a7565b91506115d3826115b8565b600082019050919050565b60006101408201905081810360008301526115fa818a8c61148a565b90506116096020830189610e7b565b611616604083018861150b565b611623608083018761150b565b61163060c0830186611598565b61163d60e0830185610eed565b61164b610100830184610eed565b81810361012083015261165d816115bb565b90509998505050505050505050565b60008151905061167b81610dbc565b92915050565b60006020828403121561169757611696610d4a565b5b60006116a58482850161166c565b91505092915050565b60006080820190506116c36000830187610e7b565b6116d06020830186610ed2565b6116dd6040830185610e7b565b6116ea6060830184610eed565b95945050505050565b60006116fe82610db2565b915061170983610db2565b92508282039050818111156117215761172061119d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061176e57607f821691505b60208210810361178157611780611727565b5b50919050565b60008154905061179681611756565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261182e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826117f1565b61183886836117f1565b95508019841693508086168417925050509392505050565b600061186b61186661186184610db2565b61156c565b610db2565b9050919050565b6000819050919050565b61188583611850565b61189961189182611872565b8484546117fe565b825550505050565b600090565b6118ae6118a1565b6118b981848461187c565b505050565b5b818110156118dd576118d26000826118a6565b6001810190506118bf565b5050565b601f821115611922576118f3816117cc565b6118fc846117e1565b8101602085101561190b578190505b61191f611917856117e1565b8301826118be565b50505b505050565b600082821c905092915050565b600061194560001984600802611927565b1980831691505092915050565b600061195e8383611934565b9150826002028217905092915050565b81810361197c575050611a54565b61198582611787565b67ffffffffffffffff81111561199e5761199d61179d565b5b6119a88254611756565b6119b38282856118e1565b6000601f8311600181146119e257600084156119d0578287015490505b6119da8582611952565b865550611a4d565b601f1984166119f0876117cc565b96506119fb866117cc565b60005b82811015611a23578489015482556001820191506001850194506020810190506119fe565b86831015611a405784890154611a3c601f891682611934565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b611a6b8383611a56565b67ffffffffffffffff811115611a8457611a8361179d565b5b611a8e8254611756565b611a998282856118e1565b6000601f831160018114611ac85760008415611ab6578287013590505b611ac08582611952565b865550611b28565b601f198416611ad6866117cc565b60005b82811015611afe57848901358255600182019150602085019450602081019050611ad9565b86831015611b1b5784890135611b17601f891682611934565b8355505b6001600288020188555050505b50505050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611b67601a8361108e565b9150611b7282611b31565b602082019050919050565b60006020820190508181036000830152611b9681611b5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bd782610db2565b9150611be283610db2565b925082611bf257611bf1611b9d565b5b82820690509291505056fea264697066735822122030f2ec404048094849430ab773dd99f12ad2a075efa05bd6af8d0466b56a8de164736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/backend/contractArtifacts/Work1.json b/backend/contractArtifacts/Work1.json index ce31551..8e19738 100644 --- a/backend/contractArtifacts/Work1.json +++ b/backend/contractArtifacts/Work1.json @@ -249,7 +249,7 @@ }, { "internalType": "string", - "name": "contentId", + "name": "postId", "type": "string" }, { @@ -280,7 +280,7 @@ "inputs": [ { "internalType": "string", - "name": "requestContentId", + "name": "requestPostId", "type": "string" } ], @@ -310,7 +310,7 @@ "type": "uint256" }, { - "internalType": "enum WorkContract.WorkStatus", + "internalType": "enum Work.WorkStatus", "name": "status", "type": "uint8" }, @@ -321,12 +321,12 @@ }, { "internalType": "string", - "name": "requestContentId", + "name": "requestPostId", "type": "string" }, { "internalType": "string", - "name": "evidenceContentId", + "name": "evidencePostId", "type": "string" }, { @@ -412,7 +412,7 @@ }, { "internalType": "string", - "name": "evidenceContentId", + "name": "evidencePostId", "type": "string" }, { @@ -439,8 +439,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002dd438038062002dd48339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b608051612b8d620002476000396000818161093901528181610a090152610aeb0152612b8d6000f3fe6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906113ce565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906114af565b610456565b005b34801561013357600080fd5b5061013c610569565b6040516101499190611511565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611582565b61056f565b6040516101869190611511565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b191906115f6565b6105ee565b6040516101c99796959493929190611754565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f491906117fd565b61077a565b005b6102156004803603810190610210919061185f565b610bab565b005b34801561022357600080fd5b5061022c610cf4565b6040516102399190611511565b60405180910390f35b34801561024e57600080fd5b50610269600480360381019061026491906118d3565b610cfa565b005b34801561027757600080fd5b50610280610e6f565b60405161028d9190611511565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b891906115f6565b610e75565b6040516102cb929190611913565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611992565b610e99565b005b34801561030957600080fd5b50610324600480360381019061031f91906115f6565b6110d2565b6040516103349493929190611a27565b60405180910390f35b34801561034957600080fd5b5061035261112f565b60405161035f9190611511565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611ab8565b60405180910390fd5b6000600760008154809291906103c290611b07565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061043482611135565b8160030181905550838382600401918261044f929190611d95565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611eb1565b60405180910390fd5b6000600560008154809291906104ae90611b07565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611ed1565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a9190611511565b60405180910390a15050505050565b60075481565b600080838381019061058191906115f6565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d8929190611913565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611bb8565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611bb8565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a4611632565b5b8160020160009054906101000a900460ff1660038111156107c9576107c8611632565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611f51565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b611632565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561088a57610889611b5a565b5b6040519080825280602002602001820160405280156108c357816020015b6108b061132f565b8152602001906001900390816108a85790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061092c5761092b611f71565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b815260040161099a9392919061230e565b600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109fd92919061235a565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738560010154866005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610aa49796959493929190612491565b60206040518083038185885af1158015610ac2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ae79190612532565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610b71949392919061255f565b600060405180830381600087803b158015610b8b57600080fd5b505af1158015610b9f573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610bc090611b07565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610c3a9190611511565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610c6a9695949392919061263d565b60206040518083038185885af1158015610c88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cad9190612532565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610ce49190611511565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90612712565b60405180910390fd5b8060030160009054906101000a900460ff1615610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec906127a4565b60405180910390fd5b8060020154421115610e1a578142610e0d9190611ed1565b8160020181905550610e33565b818160020154610e2a9190611ed1565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610e629190611511565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610ec457610ec3611632565b5b8160020160009054906101000a900460ff166003811115610ee857610ee7611632565b5b14610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612810565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc906128a2565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610ffd57610ffc611632565b5b02179055508585836005019182611015929190611d95565b5060005b84849050811015611091578260060185858381811061103b5761103a611f71565b5b905060200281019061104d91906128d1565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816110829190612a7d565b50508080600101915050611019565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516110c19190611511565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061113f6111b4565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516111a6929190611913565b60405180910390a150919050565b60008060005b60055481101561123b576004600082815260200190815260200160002060030160009054906101000a900460ff1661122e576004600082815260200190815260200160002060020154421161122e5760046000828152602001908152602001600020600101548261122b9190611ed1565b91505b80806001019150506111ba565b506000811161127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690612ad7565b60405180910390fd5b6000814461128d9190612b26565b9050600080600090505b600554811015611328576004600082815260200190815260200160002060030160009054906101000a900460ff1661131b576004600082815260200190815260200160002060020154421161131b576004600082815260200190815260200160002060010154826113089190611ed1565b91508282111561131a57809450611328565b5b8080600101915050611297565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261138e5761138d611369565b5b8235905067ffffffffffffffff8111156113ab576113aa61136e565b5b6020830191508360018202830111156113c7576113c6611373565b5b9250929050565b600080602083850312156113e5576113e461135f565b5b600083013567ffffffffffffffff81111561140357611402611364565b5b61140f85828601611378565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114468261141b565b9050919050565b6114568161143b565b811461146157600080fd5b50565b6000813590506114738161144d565b92915050565b6000819050919050565b61148c81611479565b811461149757600080fd5b50565b6000813590506114a981611483565b92915050565b6000806000606084860312156114c8576114c761135f565b5b60006114d686828701611464565b93505060206114e78682870161149a565b92505060406114f88682870161149a565b9150509250925092565b61150b81611479565b82525050565b60006020820190506115266000830184611502565b92915050565b60008083601f84011261154257611541611369565b5b8235905067ffffffffffffffff81111561155f5761155e61136e565b5b60208301915083600182028301111561157b5761157a611373565b5b9250929050565b6000806000806060858703121561159c5761159b61135f565b5b60006115aa8782880161149a565b94505060206115bb8782880161149a565b935050604085013567ffffffffffffffff8111156115dc576115db611364565b5b6115e88782880161152c565b925092505092959194509250565b60006020828403121561160c5761160b61135f565b5b600061161a8482850161149a565b91505092915050565b61162c8161143b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061167257611671611632565b5b50565b600081905061168382611661565b919050565b600061169382611675565b9050919050565b6116a381611688565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116e35780820151818401526020810190506116c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061170b826116a9565b61171581856116b4565b93506117258185602086016116c5565b61172e816116ef565b840191505092915050565b60008115159050919050565b61174e81611739565b82525050565b600060e082019050611769600083018a611623565b6117766020830189611502565b611783604083018861169a565b6117906060830187611502565b81810360808301526117a28186611700565b905081810360a08301526117b68185611700565b90506117c560c0830184611745565b98975050505050505050565b6117da81611739565b81146117e557600080fd5b50565b6000813590506117f7816117d1565b92915050565b600080604083850312156118145761181361135f565b5b60006118228582860161149a565b9250506020611833858286016117e8565b9150509250929050565b60008190508260206003028201111561185957611858611373565b5b92915050565b60008060008060a085870312156118795761187861135f565b5b60006118878782880161149a565b945050602085013567ffffffffffffffff8111156118a8576118a7611364565b5b6118b487828801611378565b935093505060406118c78782880161183d565b91505092959194509250565b600080604083850312156118ea576118e961135f565b5b60006118f88582860161149a565b92505060206119098582860161149a565b9150509250929050565b60006040820190506119286000830185611502565b6119356020830184611502565b9392505050565b60008083601f84011261195257611951611369565b5b8235905067ffffffffffffffff81111561196f5761196e61136e565b5b60208301915083602082028301111561198b5761198a611373565b5b9250929050565b6000806000806000606086880312156119ae576119ad61135f565b5b60006119bc8882890161149a565b955050602086013567ffffffffffffffff8111156119dd576119dc611364565b5b6119e988828901611378565b9450945050604086013567ffffffffffffffff811115611a0c57611a0b611364565b5b611a188882890161193c565b92509250509295509295909350565b6000608082019050611a3c6000830187611623565b611a496020830186611502565b611a566040830185611502565b611a636060830184611745565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611aa26010836116b4565b9150611aad82611a6c565b602082019050919050565b60006020820190508181036000830152611ad181611a95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b1282611479565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b4457611b43611ad8565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bd057607f821691505b602082108103611be357611be2611b89565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c0e565b611c558683611c0e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611c92611c8d611c8884611479565b611c6d565b611479565b9050919050565b6000819050919050565b611cac83611c77565b611cc0611cb882611c99565b848454611c1b565b825550505050565b600090565b611cd5611cc8565b611ce0818484611ca3565b505050565b5b81811015611d0457611cf9600082611ccd565b600181019050611ce6565b5050565b601f821115611d4957611d1a81611be9565b611d2384611bfe565b81016020851015611d32578190505b611d46611d3e85611bfe565b830182611ce5565b50505b505050565b600082821c905092915050565b6000611d6c60001984600802611d4e565b1980831691505092915050565b6000611d858383611d5b565b9150826002028217905092915050565b611d9f8383611b4f565b67ffffffffffffffff811115611db857611db7611b5a565b5b611dc28254611bb8565b611dcd828285611d08565b6000601f831160018114611dfc5760008415611dea578287013590505b611df48582611d79565b865550611e5c565b601f198416611e0a86611be9565b60005b82811015611e3257848901358255600182019150602085019450602081019050611e0d565b86831015611e4f5784890135611e4b601f891682611d5b565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611e9b6011836116b4565b9150611ea682611e65565b602082019050919050565b60006020820190508181036000830152611eca81611e8e565b9050919050565b6000611edc82611479565b9150611ee783611479565b9250828201905080821115611eff57611efe611ad8565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f3b6020836116b4565b9150611f4682611f05565b602082019050919050565b60006020820190508181036000830152611f6a81611f2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611fd581611479565b82525050565b611fe48161143b565b82525050565b6040820160008201516120006000850182611fcc565b5060208201516120136020850182611fdb565b50505050565b60006120258383611fea565b60408301905092915050565b6000602082019050919050565b600061204982611fa0565b6120538185611fab565b935061205e83611fbc565b8060005b8381101561208f5781516120768882612019565b975061208183612031565b925050600181019050612062565b5085935050505092915050565b600081546120a981611bb8565b6120b381866116b4565b945060018216600081146120ce57600181146120e457612117565b60ff198316865281151560200286019350612117565b6120ed85611be9565b60005b8381101561210f578154818901526001820191506020810190506120f0565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061217b61217683612151565b61215e565b9050919050565b6000819050919050565b61219581612182565b82525050565b600082825260208201905092915050565b600081546121b981611bb8565b6121c3818661219b565b945060018216600081146121de57600181146121f457612227565b60ff198316865281151560200286019350612227565b6121fd85611be9565b60005b8381101561221f57815481890152600182019150602081019050612200565b808801955050505b50505092915050565b600060408301600080840154905061224781612168565b612254600087018261218c565b5060018401858303602087015261226b83826121ac565b925050819250505092915050565b60006122858383612230565b905092915050565b6000600282019050919050565b60006122a582612120565b6122af818561212b565b9350836020820285016122c18561213c565b8060005b858110156122fc578484038952816122dd8582612279565b94506122e88361228d565b925060208a019950506001810190506122c5565b50829750879550505050505092915050565b60006060820190508181036000830152612328818661203e565b9050818103602083015261233c818561209c565b90508181036040830152612350818461229a565b9050949350505050565b600060408201905061236f6000830185611502565b61237c6020830184611745565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006123af8383611fcc565b60208301905092915050565b6000602082019050919050565b6123d181612383565b6123db818461238e565b92506123e682612399565b8060005b838110156124175781516123fe87826123a3565b9650612409836123bb565b9250506001810190506123ea565b505050505050565b6000819050919050565b600061244461243f61243a8461241f565b611c6d565b611479565b9050919050565b61245481612429565b82525050565b600082825260208201905092915050565b50565b600061247b60008361245a565b91506124868261246b565b600082019050919050565b60006101408201905081810360008301526124ac818a61209c565b90506124bb6020830189611502565b6124c860408301886123c8565b6124d560808301876123c8565b6124e260c083018661244b565b6124ef60e0830185611745565b6124fd610100830184611745565b81810361012083015261250f8161246e565b905098975050505050505050565b60008151905061252c81611483565b92915050565b6000602082840312156125485761254761135f565b5b60006125568482850161251d565b91505092915050565b60006080820190506125746000830187611502565b6125816020830186611623565b61258e6040830185611502565b61259b6060830184611745565b95945050505050565b82818337600083830152505050565b60006125bf83856116b4565b93506125cc8385846125a4565b6125d5836116ef565b840190509392505050565b82818337505050565b6125f5606083836125e0565b5050565b600081519050919050565b600061260f826125f9565b612619818561245a565b93506126298185602086016116c5565b612632816116ef565b840191505092915050565b600060e082019050818103600083015261265881888a6125b3565b90506126676020830187611623565b61267460408301866125e9565b61268160a0830185611745565b81810360c08301526126938184612604565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006126fc6033836116b4565b9150612707826126a0565b604082019050919050565b6000602082019050818103600083015261272b816126ef565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061278e6024836116b4565b915061279982612732565b604082019050919050565b600060208201905081810360008301526127bd81612781565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006127fa6018836116b4565b9150612805826127c4565b602082019050919050565b60006020820190508181036000830152612829816127ed565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061288c603a836116b4565b915061289782612830565b604082019050919050565b600060208201905081810360008301526128bb8161287f565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126128ed576128ec6128c2565b5b80830191505092915050565b61290281612182565b811461290d57600080fd5b50565b6000813561291d816128f9565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61295f84612926565b9350801983169250808416831791505092915050565b600061299061298b61298684612182565b611c6d565b612182565b9050919050565b6000819050919050565b6129aa82612975565b6129bd6129b682612997565b8354612933565b8255505050565b600080833560016020038436030381126129e1576129e06128c2565b5b80840192508235915067ffffffffffffffff821115612a0357612a026128c7565b5b602083019250600182023603831315612a1f57612a1e6128cc565b5b509250929050565b612a32838383611d95565b505050565b600081016000830180612a4981612910565b9050612a5581846129a1565b5050506001810160208301612a6a81856129c4565b612a75818386612a27565b505050505050565b612a878282612a37565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ac1601a836116b4565b9150612acc82612a8b565b602082019050919050565b60006020820190508181036000830152612af081612ab4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b3182611479565b9150612b3c83611479565b925082612b4c57612b4b612af7565b5b82820690509291505056fea2646970667358221220e255ca2bcc0016bc3f15d92427e9abccdfb8b0123d114dc75d1b0d6b25854eeb64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906113ce565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906114af565b610456565b005b34801561013357600080fd5b5061013c610569565b6040516101499190611511565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611582565b61056f565b6040516101869190611511565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b191906115f6565b6105ee565b6040516101c99796959493929190611754565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f491906117fd565b61077a565b005b6102156004803603810190610210919061185f565b610bab565b005b34801561022357600080fd5b5061022c610cf4565b6040516102399190611511565b60405180910390f35b34801561024e57600080fd5b50610269600480360381019061026491906118d3565b610cfa565b005b34801561027757600080fd5b50610280610e6f565b60405161028d9190611511565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b891906115f6565b610e75565b6040516102cb929190611913565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611992565b610e99565b005b34801561030957600080fd5b50610324600480360381019061031f91906115f6565b6110d2565b6040516103349493929190611a27565b60405180910390f35b34801561034957600080fd5b5061035261112f565b60405161035f9190611511565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611ab8565b60405180910390fd5b6000600760008154809291906103c290611b07565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061043482611135565b8160030181905550838382600401918261044f929190611d95565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611eb1565b60405180910390fd5b6000600560008154809291906104ae90611b07565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611ed1565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a9190611511565b60405180910390a15050505050565b60075481565b600080838381019061058191906115f6565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d8929190611913565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611bb8565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611bb8565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a4611632565b5b8160020160009054906101000a900460ff1660038111156107c9576107c8611632565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611f51565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b611632565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561088a57610889611b5a565b5b6040519080825280602002602001820160405280156108c357816020015b6108b061132f565b8152602001906001900390816108a85790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061092c5761092b611f71565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b815260040161099a9392919061230e565b600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109fd92919061235a565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738560010154866005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610aa49796959493929190612491565b60206040518083038185885af1158015610ac2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ae79190612532565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610b71949392919061255f565b600060405180830381600087803b158015610b8b57600080fd5b505af1158015610b9f573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610bc090611b07565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610c3a9190611511565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610c6a9695949392919061263d565b60206040518083038185885af1158015610c88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cad9190612532565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610ce49190611511565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90612712565b60405180910390fd5b8060030160009054906101000a900460ff1615610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec906127a4565b60405180910390fd5b8060020154421115610e1a578142610e0d9190611ed1565b8160020181905550610e33565b818160020154610e2a9190611ed1565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610e629190611511565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610ec457610ec3611632565b5b8160020160009054906101000a900460ff166003811115610ee857610ee7611632565b5b14610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612810565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc906128a2565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610ffd57610ffc611632565b5b02179055508585836005019182611015929190611d95565b5060005b84849050811015611091578260060185858381811061103b5761103a611f71565b5b905060200281019061104d91906128d1565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816110829190612a7d565b50508080600101915050611019565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516110c19190611511565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061113f6111b4565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516111a6929190611913565b60405180910390a150919050565b60008060005b60055481101561123b576004600082815260200190815260200160002060030160009054906101000a900460ff1661122e576004600082815260200190815260200160002060020154421161122e5760046000828152602001908152602001600020600101548261122b9190611ed1565b91505b80806001019150506111ba565b506000811161127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690612ad7565b60405180910390fd5b6000814461128d9190612b26565b9050600080600090505b600554811015611328576004600082815260200190815260200160002060030160009054906101000a900460ff1661131b576004600082815260200190815260200160002060020154421161131b576004600082815260200190815260200160002060010154826113089190611ed1565b91508282111561131a57809450611328565b5b8080600101915050611297565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261138e5761138d611369565b5b8235905067ffffffffffffffff8111156113ab576113aa61136e565b5b6020830191508360018202830111156113c7576113c6611373565b5b9250929050565b600080602083850312156113e5576113e461135f565b5b600083013567ffffffffffffffff81111561140357611402611364565b5b61140f85828601611378565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114468261141b565b9050919050565b6114568161143b565b811461146157600080fd5b50565b6000813590506114738161144d565b92915050565b6000819050919050565b61148c81611479565b811461149757600080fd5b50565b6000813590506114a981611483565b92915050565b6000806000606084860312156114c8576114c761135f565b5b60006114d686828701611464565b93505060206114e78682870161149a565b92505060406114f88682870161149a565b9150509250925092565b61150b81611479565b82525050565b60006020820190506115266000830184611502565b92915050565b60008083601f84011261154257611541611369565b5b8235905067ffffffffffffffff81111561155f5761155e61136e565b5b60208301915083600182028301111561157b5761157a611373565b5b9250929050565b6000806000806060858703121561159c5761159b61135f565b5b60006115aa8782880161149a565b94505060206115bb8782880161149a565b935050604085013567ffffffffffffffff8111156115dc576115db611364565b5b6115e88782880161152c565b925092505092959194509250565b60006020828403121561160c5761160b61135f565b5b600061161a8482850161149a565b91505092915050565b61162c8161143b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061167257611671611632565b5b50565b600081905061168382611661565b919050565b600061169382611675565b9050919050565b6116a381611688565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116e35780820151818401526020810190506116c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061170b826116a9565b61171581856116b4565b93506117258185602086016116c5565b61172e816116ef565b840191505092915050565b60008115159050919050565b61174e81611739565b82525050565b600060e082019050611769600083018a611623565b6117766020830189611502565b611783604083018861169a565b6117906060830187611502565b81810360808301526117a28186611700565b905081810360a08301526117b68185611700565b90506117c560c0830184611745565b98975050505050505050565b6117da81611739565b81146117e557600080fd5b50565b6000813590506117f7816117d1565b92915050565b600080604083850312156118145761181361135f565b5b60006118228582860161149a565b9250506020611833858286016117e8565b9150509250929050565b60008190508260206003028201111561185957611858611373565b5b92915050565b60008060008060a085870312156118795761187861135f565b5b60006118878782880161149a565b945050602085013567ffffffffffffffff8111156118a8576118a7611364565b5b6118b487828801611378565b935093505060406118c78782880161183d565b91505092959194509250565b600080604083850312156118ea576118e961135f565b5b60006118f88582860161149a565b92505060206119098582860161149a565b9150509250929050565b60006040820190506119286000830185611502565b6119356020830184611502565b9392505050565b60008083601f84011261195257611951611369565b5b8235905067ffffffffffffffff81111561196f5761196e61136e565b5b60208301915083602082028301111561198b5761198a611373565b5b9250929050565b6000806000806000606086880312156119ae576119ad61135f565b5b60006119bc8882890161149a565b955050602086013567ffffffffffffffff8111156119dd576119dc611364565b5b6119e988828901611378565b9450945050604086013567ffffffffffffffff811115611a0c57611a0b611364565b5b611a188882890161193c565b92509250509295509295909350565b6000608082019050611a3c6000830187611623565b611a496020830186611502565b611a566040830185611502565b611a636060830184611745565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611aa26010836116b4565b9150611aad82611a6c565b602082019050919050565b60006020820190508181036000830152611ad181611a95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b1282611479565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b4457611b43611ad8565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bd057607f821691505b602082108103611be357611be2611b89565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c0e565b611c558683611c0e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611c92611c8d611c8884611479565b611c6d565b611479565b9050919050565b6000819050919050565b611cac83611c77565b611cc0611cb882611c99565b848454611c1b565b825550505050565b600090565b611cd5611cc8565b611ce0818484611ca3565b505050565b5b81811015611d0457611cf9600082611ccd565b600181019050611ce6565b5050565b601f821115611d4957611d1a81611be9565b611d2384611bfe565b81016020851015611d32578190505b611d46611d3e85611bfe565b830182611ce5565b50505b505050565b600082821c905092915050565b6000611d6c60001984600802611d4e565b1980831691505092915050565b6000611d858383611d5b565b9150826002028217905092915050565b611d9f8383611b4f565b67ffffffffffffffff811115611db857611db7611b5a565b5b611dc28254611bb8565b611dcd828285611d08565b6000601f831160018114611dfc5760008415611dea578287013590505b611df48582611d79565b865550611e5c565b601f198416611e0a86611be9565b60005b82811015611e3257848901358255600182019150602085019450602081019050611e0d565b86831015611e4f5784890135611e4b601f891682611d5b565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611e9b6011836116b4565b9150611ea682611e65565b602082019050919050565b60006020820190508181036000830152611eca81611e8e565b9050919050565b6000611edc82611479565b9150611ee783611479565b9250828201905080821115611eff57611efe611ad8565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f3b6020836116b4565b9150611f4682611f05565b602082019050919050565b60006020820190508181036000830152611f6a81611f2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611fd581611479565b82525050565b611fe48161143b565b82525050565b6040820160008201516120006000850182611fcc565b5060208201516120136020850182611fdb565b50505050565b60006120258383611fea565b60408301905092915050565b6000602082019050919050565b600061204982611fa0565b6120538185611fab565b935061205e83611fbc565b8060005b8381101561208f5781516120768882612019565b975061208183612031565b925050600181019050612062565b5085935050505092915050565b600081546120a981611bb8565b6120b381866116b4565b945060018216600081146120ce57600181146120e457612117565b60ff198316865281151560200286019350612117565b6120ed85611be9565b60005b8381101561210f578154818901526001820191506020810190506120f0565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061217b61217683612151565b61215e565b9050919050565b6000819050919050565b61219581612182565b82525050565b600082825260208201905092915050565b600081546121b981611bb8565b6121c3818661219b565b945060018216600081146121de57600181146121f457612227565b60ff198316865281151560200286019350612227565b6121fd85611be9565b60005b8381101561221f57815481890152600182019150602081019050612200565b808801955050505b50505092915050565b600060408301600080840154905061224781612168565b612254600087018261218c565b5060018401858303602087015261226b83826121ac565b925050819250505092915050565b60006122858383612230565b905092915050565b6000600282019050919050565b60006122a582612120565b6122af818561212b565b9350836020820285016122c18561213c565b8060005b858110156122fc578484038952816122dd8582612279565b94506122e88361228d565b925060208a019950506001810190506122c5565b50829750879550505050505092915050565b60006060820190508181036000830152612328818661203e565b9050818103602083015261233c818561209c565b90508181036040830152612350818461229a565b9050949350505050565b600060408201905061236f6000830185611502565b61237c6020830184611745565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006123af8383611fcc565b60208301905092915050565b6000602082019050919050565b6123d181612383565b6123db818461238e565b92506123e682612399565b8060005b838110156124175781516123fe87826123a3565b9650612409836123bb565b9250506001810190506123ea565b505050505050565b6000819050919050565b600061244461243f61243a8461241f565b611c6d565b611479565b9050919050565b61245481612429565b82525050565b600082825260208201905092915050565b50565b600061247b60008361245a565b91506124868261246b565b600082019050919050565b60006101408201905081810360008301526124ac818a61209c565b90506124bb6020830189611502565b6124c860408301886123c8565b6124d560808301876123c8565b6124e260c083018661244b565b6124ef60e0830185611745565b6124fd610100830184611745565b81810361012083015261250f8161246e565b905098975050505050505050565b60008151905061252c81611483565b92915050565b6000602082840312156125485761254761135f565b5b60006125568482850161251d565b91505092915050565b60006080820190506125746000830187611502565b6125816020830186611623565b61258e6040830185611502565b61259b6060830184611745565b95945050505050565b82818337600083830152505050565b60006125bf83856116b4565b93506125cc8385846125a4565b6125d5836116ef565b840190509392505050565b82818337505050565b6125f5606083836125e0565b5050565b600081519050919050565b600061260f826125f9565b612619818561245a565b93506126298185602086016116c5565b612632816116ef565b840191505092915050565b600060e082019050818103600083015261265881888a6125b3565b90506126676020830187611623565b61267460408301866125e9565b61268160a0830185611745565b81810360c08301526126938184612604565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006126fc6033836116b4565b9150612707826126a0565b604082019050919050565b6000602082019050818103600083015261272b816126ef565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061278e6024836116b4565b915061279982612732565b604082019050919050565b600060208201905081810360008301526127bd81612781565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006127fa6018836116b4565b9150612805826127c4565b602082019050919050565b60006020820190508181036000830152612829816127ed565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061288c603a836116b4565b915061289782612830565b604082019050919050565b600060208201905081810360008301526128bb8161287f565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126128ed576128ec6128c2565b5b80830191505092915050565b61290281612182565b811461290d57600080fd5b50565b6000813561291d816128f9565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61295f84612926565b9350801983169250808416831791505092915050565b600061299061298b61298684612182565b611c6d565b612182565b9050919050565b6000819050919050565b6129aa82612975565b6129bd6129b682612997565b8354612933565b8255505050565b600080833560016020038436030381126129e1576129e06128c2565b5b80840192508235915067ffffffffffffffff821115612a0357612a026128c7565b5b602083019250600182023603831315612a1f57612a1e6128cc565b5b509250929050565b612a32838383611d95565b505050565b600081016000830180612a4981612910565b9050612a5581846129a1565b5050506001810160208301612a6a81856129c4565b612a75818386612a27565b505050505050565b612a878282612a37565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ac1601a836116b4565b9150612acc82612a8b565b602082019050919050565b60006020820190508181036000830152612af081612ab4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b3182611479565b9150612b3c83611479565b925082612b4c57612b4b612af7565b5b82820690509291505056fea2646970667358221220e255ca2bcc0016bc3f15d92427e9abccdfb8b0123d114dc75d1b0d6b25854eeb64736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002ee638038062002ee68339818101604052810190620000379190620001c4565b82828282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060038190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000220565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f882620000cb565b9050919050565b60006200010c82620000eb565b9050919050565b6200011e81620000ff565b81146200012a57600080fd5b50565b6000815190506200013e8162000113565b92915050565b60006200015182620000eb565b9050919050565b620001638162000144565b81146200016f57600080fd5b50565b600081519050620001838162000158565b92915050565b6000819050919050565b6200019e8162000189565b8114620001aa57600080fd5b50565b600081519050620001be8162000193565b92915050565b600080600060608486031215620001e057620001df620000c6565b5b6000620001f0868287016200012d565b9350506020620002038682870162000172565b92505060406200021686828701620001ad565b9150509250925092565b608051612c95620002516000396000818161049401528181610a0101528181610ad10152610bb30152612c956000f3fe6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f79190611452565b610368565b005b34801561010a57600080fd5b5061012560048036038101906101209190611533565b610492565b005b34801561013357600080fd5b5061013c610632565b6040516101499190611595565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611606565b610638565b6040516101869190611595565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b1919061167a565b6106b7565b6040516101c997969594939291906117d8565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611881565b610843565b005b610215600480360381019061021091906118e3565b610c73565b005b34801561022357600080fd5b5061022c610dbc565b6040516102399190611595565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190611957565b610dc2565b005b34801561027757600080fd5b50610280610f36565b60405161028d9190611595565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b8919061167a565b610f3c565b6040516102cb929190611997565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611a16565b610f60565b005b34801561030957600080fd5b50610324600480360381019061031f919061167a565b611198565b6040516103349493929190611aab565b60405180910390f35b34801561034957600080fd5b506103526111f5565b60405161035f9190611595565b60405180910390f35b6003543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611b3c565b60405180910390fd5b6000600760008154809291906103c290611b8b565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104336111fb565b8160030181905550838382600401918261044e929190611e19565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610484929190611997565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051790611f5b565b60405180910390fd5b60008211610563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055a90611fc7565b60405180910390fd5b60006001600081548092919061057890611b8b565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105ec9190611fe7565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516106239190611595565b60405180910390a15050505050565b60075481565b600080838381019061064a919061167a565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106a1929190611997565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461071f90611c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461074b90611c3c565b80156107985780601f1061076d57610100808354040283529160200191610798565b820191906000526020600020905b81548152906001019060200180831161077b57829003601f168201915b5050505050908060050180546107ad90611c3c565b80601f01602080910402602001604051908101604052809291908181526020018280546107d990611c3c565b80156108265780601f106107fb57610100808354040283529160200191610826565b820191906000526020600020905b81548152906001019060200180831161080957829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b60006006600084815260200190815260200160002090506001600381111561086e5761086d6116b6565b5b8160020160009054906101000a900460ff166003811115610892576108916116b6565b5b146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990612067565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610914576109136116b6565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561095257610951611bde565b5b60405190808252806020026020018201604052801561098b57816020015b6109786113b3565b8152602001906001900390816109705790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250816000815181106109f4576109f3612087565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610a6293929190612424565b600060405180830381600087803b158015610a7c57600080fd5b505af1158015610a90573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ac5929190612470565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738560010154866005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610b6c97969594939291906125a7565b60206040518083038185885af1158015610b8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610baf9190612648565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610c399493929190612675565b600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610c8890611b8b565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610d039190611595565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610d32959493929190612753565b60206040518083038185885af1158015610d50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d759190612648565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610dac9190611595565b60405180910390a1505050505050565b60035481565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e619061281a565b60405180910390fd5b8060030160009054906101000a900460ff1615610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906128ac565b60405180910390fd5b8060020154421115610ee1578142610ed49190611fe7565b8160020181905550610efa565b818160020154610ef19190611fe7565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f299190611595565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610f8b57610f8a6116b6565b5b8160020160009054906101000a900460ff166003811115610faf57610fae6116b6565b5b14610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690612918565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611092906129aa565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110c3576110c26116b6565b5b021790555085858360050191826110db929190611e19565b5060005b84849050811015611157578260060185858381811061110157611100612087565b5b905060200281019061111391906129d9565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816111489190612b85565b505080806001019150506110df565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111879190611595565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b600061120561123e565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156112c25760008082815260200190815260200160002060030160009054906101000a900460ff166112b5576000808281526020019081526020016000206002015442116112b55760008082815260200190815260200160002060010154826112b29190611fe7565b91505b8080600101915050611244565b5060008111611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90612bdf565b60405180910390fd5b600081446113149190612c2e565b9050600080600090505b6001548110156113ac5760008082815260200190815260200160002060030160009054906101000a900460ff1661139f5760008082815260200190815260200160002060020154421161139f57600080828152602001908152602001600020600101548261138c9190611fe7565b91508282111561139e578094506113ac565b5b808060010191505061131e565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611412576114116113ed565b5b8235905067ffffffffffffffff81111561142f5761142e6113f2565b5b60208301915083600182028301111561144b5761144a6113f7565b5b9250929050565b60008060208385031215611469576114686113e3565b5b600083013567ffffffffffffffff811115611487576114866113e8565b5b611493858286016113fc565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114ca8261149f565b9050919050565b6114da816114bf565b81146114e557600080fd5b50565b6000813590506114f7816114d1565b92915050565b6000819050919050565b611510816114fd565b811461151b57600080fd5b50565b60008135905061152d81611507565b92915050565b60008060006060848603121561154c5761154b6113e3565b5b600061155a868287016114e8565b935050602061156b8682870161151e565b925050604061157c8682870161151e565b9150509250925092565b61158f816114fd565b82525050565b60006020820190506115aa6000830184611586565b92915050565b60008083601f8401126115c6576115c56113ed565b5b8235905067ffffffffffffffff8111156115e3576115e26113f2565b5b6020830191508360018202830111156115ff576115fe6113f7565b5b9250929050565b600080600080606085870312156116205761161f6113e3565b5b600061162e8782880161151e565b945050602061163f8782880161151e565b935050604085013567ffffffffffffffff8111156116605761165f6113e8565b5b61166c878288016115b0565b925092505092959194509250565b6000602082840312156116905761168f6113e3565b5b600061169e8482850161151e565b91505092915050565b6116b0816114bf565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f6576116f56116b6565b5b50565b6000819050611707826116e5565b919050565b6000611717826116f9565b9050919050565b6117278161170c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561176757808201518184015260208101905061174c565b60008484015250505050565b6000601f19601f8301169050919050565b600061178f8261172d565b6117998185611738565b93506117a9818560208601611749565b6117b281611773565b840191505092915050565b60008115159050919050565b6117d2816117bd565b82525050565b600060e0820190506117ed600083018a6116a7565b6117fa6020830189611586565b611807604083018861171e565b6118146060830187611586565b81810360808301526118268186611784565b905081810360a083015261183a8185611784565b905061184960c08301846117c9565b98975050505050505050565b61185e816117bd565b811461186957600080fd5b50565b60008135905061187b81611855565b92915050565b60008060408385031215611898576118976113e3565b5b60006118a68582860161151e565b92505060206118b78582860161186c565b9150509250929050565b6000819050826020600302820111156118dd576118dc6113f7565b5b92915050565b60008060008060a085870312156118fd576118fc6113e3565b5b600061190b8782880161151e565b945050602085013567ffffffffffffffff81111561192c5761192b6113e8565b5b611938878288016113fc565b9350935050604061194b878288016118c1565b91505092959194509250565b6000806040838503121561196e5761196d6113e3565b5b600061197c8582860161151e565b925050602061198d8582860161151e565b9150509250929050565b60006040820190506119ac6000830185611586565b6119b96020830184611586565b9392505050565b60008083601f8401126119d6576119d56113ed565b5b8235905067ffffffffffffffff8111156119f3576119f26113f2565b5b602083019150836020820283011115611a0f57611a0e6113f7565b5b9250929050565b600080600080600060608688031215611a3257611a316113e3565b5b6000611a408882890161151e565b955050602086013567ffffffffffffffff811115611a6157611a606113e8565b5b611a6d888289016113fc565b9450945050604086013567ffffffffffffffff811115611a9057611a8f6113e8565b5b611a9c888289016119c0565b92509250509295509295909350565b6000608082019050611ac060008301876116a7565b611acd6020830186611586565b611ada6040830185611586565b611ae760608301846117c9565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b26601083611738565b9150611b3182611af0565b602082019050919050565b60006020820190508181036000830152611b5581611b19565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b96826114fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bc857611bc7611b5c565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c5457607f821691505b602082108103611c6757611c66611c0d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c92565b611cd98683611c92565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d16611d11611d0c846114fd565b611cf1565b6114fd565b9050919050565b6000819050919050565b611d3083611cfb565b611d44611d3c82611d1d565b848454611c9f565b825550505050565b600090565b611d59611d4c565b611d64818484611d27565b505050565b5b81811015611d8857611d7d600082611d51565b600181019050611d6a565b5050565b601f821115611dcd57611d9e81611c6d565b611da784611c82565b81016020851015611db6578190505b611dca611dc285611c82565b830182611d69565b50505b505050565b600082821c905092915050565b6000611df060001984600802611dd2565b1980831691505092915050565b6000611e098383611ddf565b9150826002028217905092915050565b611e238383611bd3565b67ffffffffffffffff811115611e3c57611e3b611bde565b5b611e468254611c3c565b611e51828285611d8c565b6000601f831160018114611e805760008415611e6e578287013590505b611e788582611dfd565b865550611ee0565b601f198416611e8e86611c6d565b60005b82811015611eb657848901358255600182019150602085019450602081019050611e91565b86831015611ed35784890135611ecf601f891682611ddf565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f45603683611738565b9150611f5082611ee9565b604082019050919050565b60006020820190508181036000830152611f7481611f38565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fb1601183611738565b9150611fbc82611f7b565b602082019050919050565b60006020820190508181036000830152611fe081611fa4565b9050919050565b6000611ff2826114fd565b9150611ffd836114fd565b925082820190508082111561201557612014611b5c565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612051602083611738565b915061205c8261201b565b602082019050919050565b6000602082019050818103600083015261208081612044565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120eb816114fd565b82525050565b6120fa816114bf565b82525050565b60408201600082015161211660008501826120e2565b50602082015161212960208501826120f1565b50505050565b600061213b8383612100565b60408301905092915050565b6000602082019050919050565b600061215f826120b6565b61216981856120c1565b9350612174836120d2565b8060005b838110156121a557815161218c888261212f565b975061219783612147565b925050600181019050612178565b5085935050505092915050565b600081546121bf81611c3c565b6121c98186611738565b945060018216600081146121e457600181146121fa5761222d565b60ff19831686528115156020028601935061222d565b61220385611c6d565b60005b8381101561222557815481890152600182019150602081019050612206565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061229161228c83612267565b612274565b9050919050565b6000819050919050565b6122ab81612298565b82525050565b600082825260208201905092915050565b600081546122cf81611c3c565b6122d981866122b1565b945060018216600081146122f4576001811461230a5761233d565b60ff19831686528115156020028601935061233d565b61231385611c6d565b60005b8381101561233557815481890152600182019150602081019050612316565b808801955050505b50505092915050565b600060408301600080840154905061235d8161227e565b61236a60008701826122a2565b5060018401858303602087015261238183826122c2565b925050819250505092915050565b600061239b8383612346565b905092915050565b6000600282019050919050565b60006123bb82612236565b6123c58185612241565b9350836020820285016123d785612252565b8060005b85811015612412578484038952816123f3858261238f565b94506123fe836123a3565b925060208a019950506001810190506123db565b50829750879550505050505092915050565b6000606082019050818103600083015261243e8186612154565b9050818103602083015261245281856121b2565b9050818103604083015261246681846123b0565b9050949350505050565b60006040820190506124856000830185611586565b61249260208301846117c9565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006124c583836120e2565b60208301905092915050565b6000602082019050919050565b6124e781612499565b6124f181846124a4565b92506124fc826124af565b8060005b8381101561252d57815161251487826124b9565b965061251f836124d1565b925050600181019050612500565b505050505050565b6000819050919050565b600061255a61255561255084612535565b611cf1565b6114fd565b9050919050565b61256a8161253f565b82525050565b600082825260208201905092915050565b50565b6000612591600083612570565b915061259c82612581565b600082019050919050565b60006101408201905081810360008301526125c2818a6121b2565b90506125d16020830189611586565b6125de60408301886124de565b6125eb60808301876124de565b6125f860c0830186612561565b61260560e08301856117c9565b6126136101008301846117c9565b81810361012083015261262581612584565b905098975050505050505050565b60008151905061264281611507565b92915050565b60006020828403121561265e5761265d6113e3565b5b600061266c84828501612633565b91505092915050565b600060808201905061268a6000830187611586565b61269760208301866116a7565b6126a46040830185611586565b6126b160608301846117c9565b95945050505050565b82818337600083830152505050565b60006126d58385611738565b93506126e28385846126ba565b6126eb83611773565b840190509392505050565b82818337505050565b61270b606083836126f6565b5050565b600081519050919050565b60006127258261270f565b61272f8185612570565b935061273f818560208601611749565b61274881611773565b840191505092915050565b600060c082019050818103600083015261276e8187896126c9565b905061277d60208301866126ff565b61278a60808301856117c9565b81810360a083015261279c818461271a565b90509695505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612804603383611738565b915061280f826127a8565b604082019050919050565b60006020820190508181036000830152612833816127f7565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612896602483611738565b91506128a18261283a565b604082019050919050565b600060208201905081810360008301526128c581612889565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612902601883611738565b915061290d826128cc565b602082019050919050565b60006020820190508181036000830152612931816128f5565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612994603a83611738565b915061299f82612938565b604082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126129f5576129f46129ca565b5b80830191505092915050565b612a0a81612298565b8114612a1557600080fd5b50565b60008135612a2581612a01565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a6784612a2e565b9350801983169250808416831791505092915050565b6000612a98612a93612a8e84612298565b611cf1565b612298565b9050919050565b6000819050919050565b612ab282612a7d565b612ac5612abe82612a9f565b8354612a3b565b8255505050565b60008083356001602003843603038112612ae957612ae86129ca565b5b80840192508235915067ffffffffffffffff821115612b0b57612b0a6129cf565b5b602083019250600182023603831315612b2757612b266129d4565b5b509250929050565b612b3a838383611e19565b505050565b600081016000830180612b5181612a18565b9050612b5d8184612aa9565b5050506001810160208301612b728185612acc565b612b7d818386612b2f565b505050505050565b612b8f8282612b3f565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612bc9601a83611738565b9150612bd482612b93565b602082019050919050565b60006020820190508181036000830152612bf881612bbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c39826114fd565b9150612c44836114fd565b925082612c5457612c53612bff565b5b82820690509291505056fea264697066735822122020fad91210d3da55e5cb9d07b93dd5b6e548f7d12913fc4c85a5d427600c06dd64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f79190611452565b610368565b005b34801561010a57600080fd5b5061012560048036038101906101209190611533565b610492565b005b34801561013357600080fd5b5061013c610632565b6040516101499190611595565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611606565b610638565b6040516101869190611595565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b1919061167a565b6106b7565b6040516101c997969594939291906117d8565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611881565b610843565b005b610215600480360381019061021091906118e3565b610c73565b005b34801561022357600080fd5b5061022c610dbc565b6040516102399190611595565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190611957565b610dc2565b005b34801561027757600080fd5b50610280610f36565b60405161028d9190611595565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b8919061167a565b610f3c565b6040516102cb929190611997565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611a16565b610f60565b005b34801561030957600080fd5b50610324600480360381019061031f919061167a565b611198565b6040516103349493929190611aab565b60405180910390f35b34801561034957600080fd5b506103526111f5565b60405161035f9190611595565b60405180910390f35b6003543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611b3c565b60405180910390fd5b6000600760008154809291906103c290611b8b565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104336111fb565b8160030181905550838382600401918261044e929190611e19565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610484929190611997565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051790611f5b565b60405180910390fd5b60008211610563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055a90611fc7565b60405180910390fd5b60006001600081548092919061057890611b8b565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105ec9190611fe7565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516106239190611595565b60405180910390a15050505050565b60075481565b600080838381019061064a919061167a565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106a1929190611997565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461071f90611c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461074b90611c3c565b80156107985780601f1061076d57610100808354040283529160200191610798565b820191906000526020600020905b81548152906001019060200180831161077b57829003601f168201915b5050505050908060050180546107ad90611c3c565b80601f01602080910402602001604051908101604052809291908181526020018280546107d990611c3c565b80156108265780601f106107fb57610100808354040283529160200191610826565b820191906000526020600020905b81548152906001019060200180831161080957829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b60006006600084815260200190815260200160002090506001600381111561086e5761086d6116b6565b5b8160020160009054906101000a900460ff166003811115610892576108916116b6565b5b146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990612067565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610914576109136116b6565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561095257610951611bde565b5b60405190808252806020026020018201604052801561098b57816020015b6109786113b3565b8152602001906001900390816109705790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250816000815181106109f4576109f3612087565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610a6293929190612424565b600060405180830381600087803b158015610a7c57600080fd5b505af1158015610a90573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ac5929190612470565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738560010154866005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610b6c97969594939291906125a7565b60206040518083038185885af1158015610b8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610baf9190612648565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610c399493929190612675565b600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610c8890611b8b565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610d039190611595565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610d32959493929190612753565b60206040518083038185885af1158015610d50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d759190612648565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610dac9190611595565b60405180910390a1505050505050565b60035481565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e619061281a565b60405180910390fd5b8060030160009054906101000a900460ff1615610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906128ac565b60405180910390fd5b8060020154421115610ee1578142610ed49190611fe7565b8160020181905550610efa565b818160020154610ef19190611fe7565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f299190611595565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610f8b57610f8a6116b6565b5b8160020160009054906101000a900460ff166003811115610faf57610fae6116b6565b5b14610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690612918565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611092906129aa565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110c3576110c26116b6565b5b021790555085858360050191826110db929190611e19565b5060005b84849050811015611157578260060185858381811061110157611100612087565b5b905060200281019061111391906129d9565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816111489190612b85565b505080806001019150506110df565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111879190611595565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b600061120561123e565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156112c25760008082815260200190815260200160002060030160009054906101000a900460ff166112b5576000808281526020019081526020016000206002015442116112b55760008082815260200190815260200160002060010154826112b29190611fe7565b91505b8080600101915050611244565b5060008111611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90612bdf565b60405180910390fd5b600081446113149190612c2e565b9050600080600090505b6001548110156113ac5760008082815260200190815260200160002060030160009054906101000a900460ff1661139f5760008082815260200190815260200160002060020154421161139f57600080828152602001908152602001600020600101548261138c9190611fe7565b91508282111561139e578094506113ac565b5b808060010191505061131e565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611412576114116113ed565b5b8235905067ffffffffffffffff81111561142f5761142e6113f2565b5b60208301915083600182028301111561144b5761144a6113f7565b5b9250929050565b60008060208385031215611469576114686113e3565b5b600083013567ffffffffffffffff811115611487576114866113e8565b5b611493858286016113fc565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114ca8261149f565b9050919050565b6114da816114bf565b81146114e557600080fd5b50565b6000813590506114f7816114d1565b92915050565b6000819050919050565b611510816114fd565b811461151b57600080fd5b50565b60008135905061152d81611507565b92915050565b60008060006060848603121561154c5761154b6113e3565b5b600061155a868287016114e8565b935050602061156b8682870161151e565b925050604061157c8682870161151e565b9150509250925092565b61158f816114fd565b82525050565b60006020820190506115aa6000830184611586565b92915050565b60008083601f8401126115c6576115c56113ed565b5b8235905067ffffffffffffffff8111156115e3576115e26113f2565b5b6020830191508360018202830111156115ff576115fe6113f7565b5b9250929050565b600080600080606085870312156116205761161f6113e3565b5b600061162e8782880161151e565b945050602061163f8782880161151e565b935050604085013567ffffffffffffffff8111156116605761165f6113e8565b5b61166c878288016115b0565b925092505092959194509250565b6000602082840312156116905761168f6113e3565b5b600061169e8482850161151e565b91505092915050565b6116b0816114bf565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f6576116f56116b6565b5b50565b6000819050611707826116e5565b919050565b6000611717826116f9565b9050919050565b6117278161170c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561176757808201518184015260208101905061174c565b60008484015250505050565b6000601f19601f8301169050919050565b600061178f8261172d565b6117998185611738565b93506117a9818560208601611749565b6117b281611773565b840191505092915050565b60008115159050919050565b6117d2816117bd565b82525050565b600060e0820190506117ed600083018a6116a7565b6117fa6020830189611586565b611807604083018861171e565b6118146060830187611586565b81810360808301526118268186611784565b905081810360a083015261183a8185611784565b905061184960c08301846117c9565b98975050505050505050565b61185e816117bd565b811461186957600080fd5b50565b60008135905061187b81611855565b92915050565b60008060408385031215611898576118976113e3565b5b60006118a68582860161151e565b92505060206118b78582860161186c565b9150509250929050565b6000819050826020600302820111156118dd576118dc6113f7565b5b92915050565b60008060008060a085870312156118fd576118fc6113e3565b5b600061190b8782880161151e565b945050602085013567ffffffffffffffff81111561192c5761192b6113e8565b5b611938878288016113fc565b9350935050604061194b878288016118c1565b91505092959194509250565b6000806040838503121561196e5761196d6113e3565b5b600061197c8582860161151e565b925050602061198d8582860161151e565b9150509250929050565b60006040820190506119ac6000830185611586565b6119b96020830184611586565b9392505050565b60008083601f8401126119d6576119d56113ed565b5b8235905067ffffffffffffffff8111156119f3576119f26113f2565b5b602083019150836020820283011115611a0f57611a0e6113f7565b5b9250929050565b600080600080600060608688031215611a3257611a316113e3565b5b6000611a408882890161151e565b955050602086013567ffffffffffffffff811115611a6157611a606113e8565b5b611a6d888289016113fc565b9450945050604086013567ffffffffffffffff811115611a9057611a8f6113e8565b5b611a9c888289016119c0565b92509250509295509295909350565b6000608082019050611ac060008301876116a7565b611acd6020830186611586565b611ada6040830185611586565b611ae760608301846117c9565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b26601083611738565b9150611b3182611af0565b602082019050919050565b60006020820190508181036000830152611b5581611b19565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b96826114fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bc857611bc7611b5c565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c5457607f821691505b602082108103611c6757611c66611c0d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c92565b611cd98683611c92565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d16611d11611d0c846114fd565b611cf1565b6114fd565b9050919050565b6000819050919050565b611d3083611cfb565b611d44611d3c82611d1d565b848454611c9f565b825550505050565b600090565b611d59611d4c565b611d64818484611d27565b505050565b5b81811015611d8857611d7d600082611d51565b600181019050611d6a565b5050565b601f821115611dcd57611d9e81611c6d565b611da784611c82565b81016020851015611db6578190505b611dca611dc285611c82565b830182611d69565b50505b505050565b600082821c905092915050565b6000611df060001984600802611dd2565b1980831691505092915050565b6000611e098383611ddf565b9150826002028217905092915050565b611e238383611bd3565b67ffffffffffffffff811115611e3c57611e3b611bde565b5b611e468254611c3c565b611e51828285611d8c565b6000601f831160018114611e805760008415611e6e578287013590505b611e788582611dfd565b865550611ee0565b601f198416611e8e86611c6d565b60005b82811015611eb657848901358255600182019150602085019450602081019050611e91565b86831015611ed35784890135611ecf601f891682611ddf565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f45603683611738565b9150611f5082611ee9565b604082019050919050565b60006020820190508181036000830152611f7481611f38565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fb1601183611738565b9150611fbc82611f7b565b602082019050919050565b60006020820190508181036000830152611fe081611fa4565b9050919050565b6000611ff2826114fd565b9150611ffd836114fd565b925082820190508082111561201557612014611b5c565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612051602083611738565b915061205c8261201b565b602082019050919050565b6000602082019050818103600083015261208081612044565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120eb816114fd565b82525050565b6120fa816114bf565b82525050565b60408201600082015161211660008501826120e2565b50602082015161212960208501826120f1565b50505050565b600061213b8383612100565b60408301905092915050565b6000602082019050919050565b600061215f826120b6565b61216981856120c1565b9350612174836120d2565b8060005b838110156121a557815161218c888261212f565b975061219783612147565b925050600181019050612178565b5085935050505092915050565b600081546121bf81611c3c565b6121c98186611738565b945060018216600081146121e457600181146121fa5761222d565b60ff19831686528115156020028601935061222d565b61220385611c6d565b60005b8381101561222557815481890152600182019150602081019050612206565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061229161228c83612267565b612274565b9050919050565b6000819050919050565b6122ab81612298565b82525050565b600082825260208201905092915050565b600081546122cf81611c3c565b6122d981866122b1565b945060018216600081146122f4576001811461230a5761233d565b60ff19831686528115156020028601935061233d565b61231385611c6d565b60005b8381101561233557815481890152600182019150602081019050612316565b808801955050505b50505092915050565b600060408301600080840154905061235d8161227e565b61236a60008701826122a2565b5060018401858303602087015261238183826122c2565b925050819250505092915050565b600061239b8383612346565b905092915050565b6000600282019050919050565b60006123bb82612236565b6123c58185612241565b9350836020820285016123d785612252565b8060005b85811015612412578484038952816123f3858261238f565b94506123fe836123a3565b925060208a019950506001810190506123db565b50829750879550505050505092915050565b6000606082019050818103600083015261243e8186612154565b9050818103602083015261245281856121b2565b9050818103604083015261246681846123b0565b9050949350505050565b60006040820190506124856000830185611586565b61249260208301846117c9565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006124c583836120e2565b60208301905092915050565b6000602082019050919050565b6124e781612499565b6124f181846124a4565b92506124fc826124af565b8060005b8381101561252d57815161251487826124b9565b965061251f836124d1565b925050600181019050612500565b505050505050565b6000819050919050565b600061255a61255561255084612535565b611cf1565b6114fd565b9050919050565b61256a8161253f565b82525050565b600082825260208201905092915050565b50565b6000612591600083612570565b915061259c82612581565b600082019050919050565b60006101408201905081810360008301526125c2818a6121b2565b90506125d16020830189611586565b6125de60408301886124de565b6125eb60808301876124de565b6125f860c0830186612561565b61260560e08301856117c9565b6126136101008301846117c9565b81810361012083015261262581612584565b905098975050505050505050565b60008151905061264281611507565b92915050565b60006020828403121561265e5761265d6113e3565b5b600061266c84828501612633565b91505092915050565b600060808201905061268a6000830187611586565b61269760208301866116a7565b6126a46040830185611586565b6126b160608301846117c9565b95945050505050565b82818337600083830152505050565b60006126d58385611738565b93506126e28385846126ba565b6126eb83611773565b840190509392505050565b82818337505050565b61270b606083836126f6565b5050565b600081519050919050565b60006127258261270f565b61272f8185612570565b935061273f818560208601611749565b61274881611773565b840191505092915050565b600060c082019050818103600083015261276e8187896126c9565b905061277d60208301866126ff565b61278a60808301856117c9565b81810360a083015261279c818461271a565b90509695505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612804603383611738565b915061280f826127a8565b604082019050919050565b60006020820190508181036000830152612833816127f7565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612896602483611738565b91506128a18261283a565b604082019050919050565b600060208201905081810360008301526128c581612889565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612902601883611738565b915061290d826128cc565b602082019050919050565b60006020820190508181036000830152612931816128f5565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612994603a83611738565b915061299f82612938565b604082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126129f5576129f46129ca565b5b80830191505092915050565b612a0a81612298565b8114612a1557600080fd5b50565b60008135612a2581612a01565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a6784612a2e565b9350801983169250808416831791505092915050565b6000612a98612a93612a8e84612298565b611cf1565b612298565b9050919050565b6000819050919050565b612ab282612a7d565b612ac5612abe82612a9f565b8354612a3b565b8255505050565b60008083356001602003843603038112612ae957612ae86129ca565b5b80840192508235915067ffffffffffffffff821115612b0b57612b0a6129cf565b5b602083019250600182023603831315612b2757612b266129d4565b5b509250929050565b612b3a838383611e19565b505050565b600081016000830180612b5181612a18565b9050612b5d8184612aa9565b5050506001810160208301612b728185612acc565b612b7d818386612b2f565b505050505050565b612b8f8282612b3f565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612bc9601a83611738565b9150612bd482612b93565b602082019050919050565b60006020820190508181036000830152612bf881612bbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c39826114fd565b9150612c44836114fd565b925082612c5457612c53612bff565b5b82820690509291505056fea264697066735822122020fad91210d3da55e5cb9d07b93dd5b6e548f7d12913fc4c85a5d427600c06dd64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/backend/contractArtifacts/Work2.json b/backend/contractArtifacts/Work2.json new file mode 100644 index 0000000..7882055 --- /dev/null +++ b/backend/contractArtifacts/Work2.json @@ -0,0 +1,451 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Work2", + "sourceName": "contracts/Work2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract DAO", + "name": "dao", + "type": "address" + }, + { + "internalType": "contract Proposals", + "name": "proposals", + "type": "address" + }, + { + "internalType": "contract Rollup", + "name": "rollup", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + } + ], + "name": "AvailabilityStaked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "priceProposalIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "PriceChangeAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "priceProposalIndex", + "type": "uint256" + } + ], + "name": "PriceChangeProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "name": "WorkApprovalSubmitted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + } + ], + "name": "WorkAssigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + } + ], + "name": "WorkEvidenceSubmitted", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "acceptAvailability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "extendAvailability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "name": "onProposalAccepted", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "priceProposalCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "priceProposals", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "proposalIndex", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "string", + "name": "postId", + "type": "string" + }, + { + "internalType": "uint256[3]", + "name": "durations", + "type": "uint256[3]" + } + ], + "name": "proposeNewPrice", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "requestCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "requestPostId", + "type": "string" + } + ], + "name": "requestWork", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "requests", + "outputs": [ + { + "internalType": "address", + "name": "customer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "internalType": "enum Work.WorkStatus", + "name": "status", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + }, + { + "internalType": "string", + "name": "requestPostId", + "type": "string" + }, + { + "internalType": "string", + "name": "evidencePostId", + "type": "string" + }, + { + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakeCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "stakes", + "outputs": [ + { + "internalType": "address", + "name": "worker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "assigned", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "name": "submitWorkApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "internalType": "string", + "name": "evidencePostId", + "type": "string" + }, + { + "components": [ + { + "internalType": "int256", + "name": "weightPPM", + "type": "int256" + }, + { + "internalType": "string", + "name": "targetPostId", + "type": "string" + } + ], + "internalType": "struct Citation[]", + "name": "citations", + "type": "tuple[]" + } + ], + "name": "submitWorkEvidence", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002e2638038062002e26833981810160405281019062000037919062000246565b8383838383838282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060038190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050505050505050620002b8565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001358262000108565b9050919050565b6000620001498262000128565b9050919050565b6200015b816200013c565b81146200016757600080fd5b50565b6000815190506200017b8162000150565b92915050565b60006200018e8262000128565b9050919050565b620001a08162000181565b8114620001ac57600080fd5b50565b600081519050620001c08162000195565b92915050565b6000620001d38262000128565b9050919050565b620001e581620001c6565b8114620001f157600080fd5b50565b6000815190506200020581620001da565b92915050565b6000819050919050565b62000220816200020b565b81146200022c57600080fd5b50565b600081519050620002408162000215565b92915050565b6000806000806080858703121562000263576200026262000103565b5b600062000273878288016200016a565b94505060206200028687828801620001af565b93505060406200029987828801620001f4565b9250506060620002ac878288016200022f565b91505092959194509250565b60805160a051612b33620002f360003960008181610b300152610ba601526000818161049401528181610a3a0152610acf0152612b336000f3fe6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f79190611449565b610368565b005b34801561010a57600080fd5b506101256004803603810190610120919061152a565b610492565b005b34801561013357600080fd5b5061013c610632565b604051610149919061158c565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906115fd565b610638565b604051610186919061158c565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b19190611671565b6106b7565b6040516101c997969594939291906117cf565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611878565b610843565b005b610215600480360381019061021091906118da565b610c6a565b005b34801561022357600080fd5b5061022c610db3565b604051610239919061158c565b60405180910390f35b34801561024e57600080fd5b506102696004803603810190610264919061194e565b610db9565b005b34801561027757600080fd5b50610280610f2d565b60405161028d919061158c565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190611671565b610f33565b6040516102cb92919061198e565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611a0d565b610f57565b005b34801561030957600080fd5b50610324600480360381019061031f9190611671565b61118f565b6040516103349493929190611aa2565b60405180910390f35b34801561034957600080fd5b506103526111ec565b60405161035f919061158c565b60405180910390f35b6003543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611b33565b60405180910390fd5b6000600760008154809291906103c290611b82565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104336111f2565b8160030181905550838382600401918261044e929190611e10565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b482826003015460405161048492919061198e565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051790611f52565b60405180910390fd5b60008211610563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055a90611fbe565b60405180910390fd5b60006001600081548092919061057890611b82565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105ec9190611fde565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610623919061158c565b60405180910390a15050505050565b60075481565b600080838381019061064a9190611671565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106a192919061198e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461071f90611c33565b80601f016020809104026020016040519081016040528092919081815260200182805461074b90611c33565b80156107985780601f1061076d57610100808354040283529160200191610798565b820191906000526020600020905b81548152906001019060200180831161077b57829003601f168201915b5050505050908060050180546107ad90611c33565b80601f01602080910402602001604051908101604052809291908181526020018280546107d990611c33565b80156108265780601f106107fb57610100808354040283529160200191610826565b820191906000526020600020905b81548152906001019060200180831161080957829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b60006006600084815260200190815260200160002090506001600381111561086e5761086d6116ad565b5b8160020160009054906101000a900460ff166003811115610892576108916116ad565b5b146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c99061205e565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610914576109136116ad565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc848460405161096692919061207e565b60405180910390a16000600167ffffffffffffffff81111561098b5761098a611bd5565b5b6040519080825280602002602001820160405280156109c457816020015b6109b16113aa565b8152602001906001900390816109a95790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610a2d57610a2c6120a7565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610a9b93929190612444565b600060405180830381600087803b158015610ab557600080fd5b505af1158015610ac9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610b7293929190612490565b600060405180830381600087803b158015610b8c57600080fd5b505af1158015610ba0573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610c31939291906124c7565b6000604051808303818588803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610c7f90611b82565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610cfa919061158c565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610d299594939291906125af565b60206040518083038185885af1158015610d47573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d6c9190612619565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610da3919061158c565b60405180910390a1505050505050565b60035481565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e58906126b8565b60405180910390fd5b8060030160009054906101000a900460ff1615610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa9061274a565b60405180910390fd5b8060020154421115610ed8578142610ecb9190611fde565b8160020181905550610ef1565b818160020154610ee89190611fde565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f20919061158c565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610f8257610f816116ad565b5b8160020160009054906101000a900460ff166003811115610fa657610fa56116ad565b5b14610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd906127b6565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108990612848565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110ba576110b96116ad565b5b021790555085858360050191826110d2929190611e10565b5060005b8484905081101561114e57826006018585838181106110f8576110f76120a7565b5b905060200281019061110a9190612877565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161113f9190612a23565b505080806001019150506110d6565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8760405161117e919061158c565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b60006111fc611235565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156112b95760008082815260200190815260200160002060030160009054906101000a900460ff166112ac576000808281526020019081526020016000206002015442116112ac5760008082815260200190815260200160002060010154826112a99190611fde565b91505b808060010191505061123b565b50600081116112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490612a7d565b60405180910390fd5b6000814461130b9190612acc565b9050600080600090505b6001548110156113a35760008082815260200190815260200160002060030160009054906101000a900460ff16611396576000808281526020019081526020016000206002015442116113965760008082815260200190815260200160002060010154826113839190611fde565b915082821115611395578094506113a3565b5b8080600101915050611315565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611409576114086113e4565b5b8235905067ffffffffffffffff811115611426576114256113e9565b5b602083019150836001820283011115611442576114416113ee565b5b9250929050565b600080602083850312156114605761145f6113da565b5b600083013567ffffffffffffffff81111561147e5761147d6113df565b5b61148a858286016113f3565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c182611496565b9050919050565b6114d1816114b6565b81146114dc57600080fd5b50565b6000813590506114ee816114c8565b92915050565b6000819050919050565b611507816114f4565b811461151257600080fd5b50565b600081359050611524816114fe565b92915050565b600080600060608486031215611543576115426113da565b5b6000611551868287016114df565b935050602061156286828701611515565b925050604061157386828701611515565b9150509250925092565b611586816114f4565b82525050565b60006020820190506115a1600083018461157d565b92915050565b60008083601f8401126115bd576115bc6113e4565b5b8235905067ffffffffffffffff8111156115da576115d96113e9565b5b6020830191508360018202830111156115f6576115f56113ee565b5b9250929050565b60008060008060608587031215611617576116166113da565b5b600061162587828801611515565b945050602061163687828801611515565b935050604085013567ffffffffffffffff811115611657576116566113df565b5b611663878288016115a7565b925092505092959194509250565b600060208284031215611687576116866113da565b5b600061169584828501611515565b91505092915050565b6116a7816114b6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116ed576116ec6116ad565b5b50565b60008190506116fe826116dc565b919050565b600061170e826116f0565b9050919050565b61171e81611703565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561175e578082015181840152602081019050611743565b60008484015250505050565b6000601f19601f8301169050919050565b600061178682611724565b611790818561172f565b93506117a0818560208601611740565b6117a98161176a565b840191505092915050565b60008115159050919050565b6117c9816117b4565b82525050565b600060e0820190506117e4600083018a61169e565b6117f1602083018961157d565b6117fe6040830188611715565b61180b606083018761157d565b818103608083015261181d818661177b565b905081810360a0830152611831818561177b565b905061184060c08301846117c0565b98975050505050505050565b611855816117b4565b811461186057600080fd5b50565b6000813590506118728161184c565b92915050565b6000806040838503121561188f5761188e6113da565b5b600061189d85828601611515565b92505060206118ae85828601611863565b9150509250929050565b6000819050826020600302820111156118d4576118d36113ee565b5b92915050565b60008060008060a085870312156118f4576118f36113da565b5b600061190287828801611515565b945050602085013567ffffffffffffffff811115611923576119226113df565b5b61192f878288016113f3565b93509350506040611942878288016118b8565b91505092959194509250565b60008060408385031215611965576119646113da565b5b600061197385828601611515565b925050602061198485828601611515565b9150509250929050565b60006040820190506119a3600083018561157d565b6119b0602083018461157d565b9392505050565b60008083601f8401126119cd576119cc6113e4565b5b8235905067ffffffffffffffff8111156119ea576119e96113e9565b5b602083019150836020820283011115611a0657611a056113ee565b5b9250929050565b600080600080600060608688031215611a2957611a286113da565b5b6000611a3788828901611515565b955050602086013567ffffffffffffffff811115611a5857611a576113df565b5b611a64888289016113f3565b9450945050604086013567ffffffffffffffff811115611a8757611a866113df565b5b611a93888289016119b7565b92509250509295509295909350565b6000608082019050611ab7600083018761169e565b611ac4602083018661157d565b611ad1604083018561157d565b611ade60608301846117c0565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b1d60108361172f565b9150611b2882611ae7565b602082019050919050565b60006020820190508181036000830152611b4c81611b10565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b8d826114f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bbf57611bbe611b53565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c4b57607f821691505b602082108103611c5e57611c5d611c04565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611cc67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c89565b611cd08683611c89565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d0d611d08611d03846114f4565b611ce8565b6114f4565b9050919050565b6000819050919050565b611d2783611cf2565b611d3b611d3382611d14565b848454611c96565b825550505050565b600090565b611d50611d43565b611d5b818484611d1e565b505050565b5b81811015611d7f57611d74600082611d48565b600181019050611d61565b5050565b601f821115611dc457611d9581611c64565b611d9e84611c79565b81016020851015611dad578190505b611dc1611db985611c79565b830182611d60565b50505b505050565b600082821c905092915050565b6000611de760001984600802611dc9565b1980831691505092915050565b6000611e008383611dd6565b9150826002028217905092915050565b611e1a8383611bca565b67ffffffffffffffff811115611e3357611e32611bd5565b5b611e3d8254611c33565b611e48828285611d83565b6000601f831160018114611e775760008415611e65578287013590505b611e6f8582611df4565b865550611ed7565b601f198416611e8586611c64565b60005b82811015611ead57848901358255600182019150602085019450602081019050611e88565b86831015611eca5784890135611ec6601f891682611dd6565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f3c60368361172f565b9150611f4782611ee0565b604082019050919050565b60006020820190508181036000830152611f6b81611f2f565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fa860118361172f565b9150611fb382611f72565b602082019050919050565b60006020820190508181036000830152611fd781611f9b565b9050919050565b6000611fe9826114f4565b9150611ff4836114f4565b925082820190508082111561200c5761200b611b53565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061204860208361172f565b915061205382612012565b602082019050919050565b600060208201905081810360008301526120778161203b565b9050919050565b6000604082019050612093600083018561157d565b6120a060208301846117c0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61210b816114f4565b82525050565b61211a816114b6565b82525050565b6040820160008201516121366000850182612102565b5060208201516121496020850182612111565b50505050565b600061215b8383612120565b60408301905092915050565b6000602082019050919050565b600061217f826120d6565b61218981856120e1565b9350612194836120f2565b8060005b838110156121c55781516121ac888261214f565b97506121b783612167565b925050600181019050612198565b5085935050505092915050565b600081546121df81611c33565b6121e9818661172f565b94506001821660008114612204576001811461221a5761224d565b60ff19831686528115156020028601935061224d565b61222385611c64565b60005b8381101561224557815481890152600182019150602081019050612226565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122b16122ac83612287565b612294565b9050919050565b6000819050919050565b6122cb816122b8565b82525050565b600082825260208201905092915050565b600081546122ef81611c33565b6122f981866122d1565b94506001821660008114612314576001811461232a5761235d565b60ff19831686528115156020028601935061235d565b61233385611c64565b60005b8381101561235557815481890152600182019150602081019050612336565b808801955050505b50505092915050565b600060408301600080840154905061237d8161229e565b61238a60008701826122c2565b506001840185830360208701526123a183826122e2565b925050819250505092915050565b60006123bb8383612366565b905092915050565b6000600282019050919050565b60006123db82612256565b6123e58185612261565b9350836020820285016123f785612272565b8060005b858110156124325784840389528161241385826123af565b945061241e836123c3565b925060208a019950506001810190506123fb565b50829750879550505050505092915050565b6000606082019050818103600083015261245e8186612174565b9050818103602083015261247281856121d2565b9050818103604083015261248681846123d0565b9050949350505050565b60006060820190506124a5600083018661169e565b6124b2602083018561169e565b6124bf604083018461157d565b949350505050565b60006060820190506124dc600083018661169e565b6124e9602083018561157d565b81810360408301526124fb81846121d2565b9050949350505050565b82818337600083830152505050565b6000612520838561172f565b935061252d838584612505565b6125368361176a565b840190509392505050565b82818337505050565b61255660608383612541565b5050565b600081519050919050565b600082825260208201905092915050565b60006125818261255a565b61258b8185612565565b935061259b818560208601611740565b6125a48161176a565b840191505092915050565b600060c08201905081810360008301526125ca818789612514565b90506125d9602083018661254a565b6125e660808301856117c0565b81810360a08301526125f88184612576565b90509695505050505050565b600081519050612613816114fe565b92915050565b60006020828403121561262f5761262e6113da565b5b600061263d84828501612604565b91505092915050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006126a260338361172f565b91506126ad82612646565b604082019050919050565b600060208201905081810360008301526126d181612695565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061273460248361172f565b915061273f826126d8565b604082019050919050565b6000602082019050818103600083015261276381612727565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006127a060188361172f565b91506127ab8261276a565b602082019050919050565b600060208201905081810360008301526127cf81612793565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612832603a8361172f565b915061283d826127d6565b604082019050919050565b6000602082019050818103600083015261286181612825565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261289357612892612868565b5b80830191505092915050565b6128a8816122b8565b81146128b357600080fd5b50565b600081356128c38161289f565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612905846128cc565b9350801983169250808416831791505092915050565b600061293661293161292c846122b8565b611ce8565b6122b8565b9050919050565b6000819050919050565b6129508261291b565b61296361295c8261293d565b83546128d9565b8255505050565b6000808335600160200384360303811261298757612986612868565b5b80840192508235915067ffffffffffffffff8211156129a9576129a861286d565b5b6020830192506001820236038313156129c5576129c4612872565b5b509250929050565b6129d8838383611e10565b505050565b6000810160008301806129ef816128b6565b90506129fb8184612947565b5050506001810160208301612a10818561296a565b612a1b8183866129cd565b505050505050565b612a2d82826129dd565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612a67601a8361172f565b9150612a7282612a31565b602082019050919050565b60006020820190508181036000830152612a9681612a5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ad7826114f4565b9150612ae2836114f4565b925082612af257612af1612a9d565b5b82820690509291505056fea26469706673582212204753a1bfd0544b67fec12074efcbf6917581147c623802bfea5e76bb04e06aad64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f79190611449565b610368565b005b34801561010a57600080fd5b506101256004803603810190610120919061152a565b610492565b005b34801561013357600080fd5b5061013c610632565b604051610149919061158c565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906115fd565b610638565b604051610186919061158c565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b19190611671565b6106b7565b6040516101c997969594939291906117cf565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611878565b610843565b005b610215600480360381019061021091906118da565b610c6a565b005b34801561022357600080fd5b5061022c610db3565b604051610239919061158c565b60405180910390f35b34801561024e57600080fd5b506102696004803603810190610264919061194e565b610db9565b005b34801561027757600080fd5b50610280610f2d565b60405161028d919061158c565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190611671565b610f33565b6040516102cb92919061198e565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611a0d565b610f57565b005b34801561030957600080fd5b50610324600480360381019061031f9190611671565b61118f565b6040516103349493929190611aa2565b60405180910390f35b34801561034957600080fd5b506103526111ec565b60405161035f919061158c565b60405180910390f35b6003543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611b33565b60405180910390fd5b6000600760008154809291906103c290611b82565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104336111f2565b8160030181905550838382600401918261044e929190611e10565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b482826003015460405161048492919061198e565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051790611f52565b60405180910390fd5b60008211610563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055a90611fbe565b60405180910390fd5b60006001600081548092919061057890611b82565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105ec9190611fde565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610623919061158c565b60405180910390a15050505050565b60075481565b600080838381019061064a9190611671565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106a192919061198e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461071f90611c33565b80601f016020809104026020016040519081016040528092919081815260200182805461074b90611c33565b80156107985780601f1061076d57610100808354040283529160200191610798565b820191906000526020600020905b81548152906001019060200180831161077b57829003601f168201915b5050505050908060050180546107ad90611c33565b80601f01602080910402602001604051908101604052809291908181526020018280546107d990611c33565b80156108265780601f106107fb57610100808354040283529160200191610826565b820191906000526020600020905b81548152906001019060200180831161080957829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b60006006600084815260200190815260200160002090506001600381111561086e5761086d6116ad565b5b8160020160009054906101000a900460ff166003811115610892576108916116ad565b5b146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c99061205e565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610914576109136116ad565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc848460405161096692919061207e565b60405180910390a16000600167ffffffffffffffff81111561098b5761098a611bd5565b5b6040519080825280602002602001820160405280156109c457816020015b6109b16113aa565b8152602001906001900390816109a95790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610a2d57610a2c6120a7565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610a9b93929190612444565b600060405180830381600087803b158015610ab557600080fd5b505af1158015610ac9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610b7293929190612490565b600060405180830381600087803b158015610b8c57600080fd5b505af1158015610ba0573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610c31939291906124c7565b6000604051808303818588803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610c7f90611b82565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610cfa919061158c565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610d299594939291906125af565b60206040518083038185885af1158015610d47573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d6c9190612619565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610da3919061158c565b60405180910390a1505050505050565b60035481565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e58906126b8565b60405180910390fd5b8060030160009054906101000a900460ff1615610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa9061274a565b60405180910390fd5b8060020154421115610ed8578142610ecb9190611fde565b8160020181905550610ef1565b818160020154610ee89190611fde565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f20919061158c565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610f8257610f816116ad565b5b8160020160009054906101000a900460ff166003811115610fa657610fa56116ad565b5b14610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd906127b6565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108990612848565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110ba576110b96116ad565b5b021790555085858360050191826110d2929190611e10565b5060005b8484905081101561114e57826006018585838181106110f8576110f76120a7565b5b905060200281019061110a9190612877565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161113f9190612a23565b505080806001019150506110d6565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8760405161117e919061158c565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b60006111fc611235565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156112b95760008082815260200190815260200160002060030160009054906101000a900460ff166112ac576000808281526020019081526020016000206002015442116112ac5760008082815260200190815260200160002060010154826112a99190611fde565b91505b808060010191505061123b565b50600081116112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490612a7d565b60405180910390fd5b6000814461130b9190612acc565b9050600080600090505b6001548110156113a35760008082815260200190815260200160002060030160009054906101000a900460ff16611396576000808281526020019081526020016000206002015442116113965760008082815260200190815260200160002060010154826113839190611fde565b915082821115611395578094506113a3565b5b8080600101915050611315565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611409576114086113e4565b5b8235905067ffffffffffffffff811115611426576114256113e9565b5b602083019150836001820283011115611442576114416113ee565b5b9250929050565b600080602083850312156114605761145f6113da565b5b600083013567ffffffffffffffff81111561147e5761147d6113df565b5b61148a858286016113f3565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c182611496565b9050919050565b6114d1816114b6565b81146114dc57600080fd5b50565b6000813590506114ee816114c8565b92915050565b6000819050919050565b611507816114f4565b811461151257600080fd5b50565b600081359050611524816114fe565b92915050565b600080600060608486031215611543576115426113da565b5b6000611551868287016114df565b935050602061156286828701611515565b925050604061157386828701611515565b9150509250925092565b611586816114f4565b82525050565b60006020820190506115a1600083018461157d565b92915050565b60008083601f8401126115bd576115bc6113e4565b5b8235905067ffffffffffffffff8111156115da576115d96113e9565b5b6020830191508360018202830111156115f6576115f56113ee565b5b9250929050565b60008060008060608587031215611617576116166113da565b5b600061162587828801611515565b945050602061163687828801611515565b935050604085013567ffffffffffffffff811115611657576116566113df565b5b611663878288016115a7565b925092505092959194509250565b600060208284031215611687576116866113da565b5b600061169584828501611515565b91505092915050565b6116a7816114b6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116ed576116ec6116ad565b5b50565b60008190506116fe826116dc565b919050565b600061170e826116f0565b9050919050565b61171e81611703565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561175e578082015181840152602081019050611743565b60008484015250505050565b6000601f19601f8301169050919050565b600061178682611724565b611790818561172f565b93506117a0818560208601611740565b6117a98161176a565b840191505092915050565b60008115159050919050565b6117c9816117b4565b82525050565b600060e0820190506117e4600083018a61169e565b6117f1602083018961157d565b6117fe6040830188611715565b61180b606083018761157d565b818103608083015261181d818661177b565b905081810360a0830152611831818561177b565b905061184060c08301846117c0565b98975050505050505050565b611855816117b4565b811461186057600080fd5b50565b6000813590506118728161184c565b92915050565b6000806040838503121561188f5761188e6113da565b5b600061189d85828601611515565b92505060206118ae85828601611863565b9150509250929050565b6000819050826020600302820111156118d4576118d36113ee565b5b92915050565b60008060008060a085870312156118f4576118f36113da565b5b600061190287828801611515565b945050602085013567ffffffffffffffff811115611923576119226113df565b5b61192f878288016113f3565b93509350506040611942878288016118b8565b91505092959194509250565b60008060408385031215611965576119646113da565b5b600061197385828601611515565b925050602061198485828601611515565b9150509250929050565b60006040820190506119a3600083018561157d565b6119b0602083018461157d565b9392505050565b60008083601f8401126119cd576119cc6113e4565b5b8235905067ffffffffffffffff8111156119ea576119e96113e9565b5b602083019150836020820283011115611a0657611a056113ee565b5b9250929050565b600080600080600060608688031215611a2957611a286113da565b5b6000611a3788828901611515565b955050602086013567ffffffffffffffff811115611a5857611a576113df565b5b611a64888289016113f3565b9450945050604086013567ffffffffffffffff811115611a8757611a866113df565b5b611a93888289016119b7565b92509250509295509295909350565b6000608082019050611ab7600083018761169e565b611ac4602083018661157d565b611ad1604083018561157d565b611ade60608301846117c0565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b1d60108361172f565b9150611b2882611ae7565b602082019050919050565b60006020820190508181036000830152611b4c81611b10565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b8d826114f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bbf57611bbe611b53565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c4b57607f821691505b602082108103611c5e57611c5d611c04565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611cc67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c89565b611cd08683611c89565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d0d611d08611d03846114f4565b611ce8565b6114f4565b9050919050565b6000819050919050565b611d2783611cf2565b611d3b611d3382611d14565b848454611c96565b825550505050565b600090565b611d50611d43565b611d5b818484611d1e565b505050565b5b81811015611d7f57611d74600082611d48565b600181019050611d61565b5050565b601f821115611dc457611d9581611c64565b611d9e84611c79565b81016020851015611dad578190505b611dc1611db985611c79565b830182611d60565b50505b505050565b600082821c905092915050565b6000611de760001984600802611dc9565b1980831691505092915050565b6000611e008383611dd6565b9150826002028217905092915050565b611e1a8383611bca565b67ffffffffffffffff811115611e3357611e32611bd5565b5b611e3d8254611c33565b611e48828285611d83565b6000601f831160018114611e775760008415611e65578287013590505b611e6f8582611df4565b865550611ed7565b601f198416611e8586611c64565b60005b82811015611ead57848901358255600182019150602085019450602081019050611e88565b86831015611eca5784890135611ec6601f891682611dd6565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f3c60368361172f565b9150611f4782611ee0565b604082019050919050565b60006020820190508181036000830152611f6b81611f2f565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fa860118361172f565b9150611fb382611f72565b602082019050919050565b60006020820190508181036000830152611fd781611f9b565b9050919050565b6000611fe9826114f4565b9150611ff4836114f4565b925082820190508082111561200c5761200b611b53565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061204860208361172f565b915061205382612012565b602082019050919050565b600060208201905081810360008301526120778161203b565b9050919050565b6000604082019050612093600083018561157d565b6120a060208301846117c0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61210b816114f4565b82525050565b61211a816114b6565b82525050565b6040820160008201516121366000850182612102565b5060208201516121496020850182612111565b50505050565b600061215b8383612120565b60408301905092915050565b6000602082019050919050565b600061217f826120d6565b61218981856120e1565b9350612194836120f2565b8060005b838110156121c55781516121ac888261214f565b97506121b783612167565b925050600181019050612198565b5085935050505092915050565b600081546121df81611c33565b6121e9818661172f565b94506001821660008114612204576001811461221a5761224d565b60ff19831686528115156020028601935061224d565b61222385611c64565b60005b8381101561224557815481890152600182019150602081019050612226565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122b16122ac83612287565b612294565b9050919050565b6000819050919050565b6122cb816122b8565b82525050565b600082825260208201905092915050565b600081546122ef81611c33565b6122f981866122d1565b94506001821660008114612314576001811461232a5761235d565b60ff19831686528115156020028601935061235d565b61233385611c64565b60005b8381101561235557815481890152600182019150602081019050612336565b808801955050505b50505092915050565b600060408301600080840154905061237d8161229e565b61238a60008701826122c2565b506001840185830360208701526123a183826122e2565b925050819250505092915050565b60006123bb8383612366565b905092915050565b6000600282019050919050565b60006123db82612256565b6123e58185612261565b9350836020820285016123f785612272565b8060005b858110156124325784840389528161241385826123af565b945061241e836123c3565b925060208a019950506001810190506123fb565b50829750879550505050505092915050565b6000606082019050818103600083015261245e8186612174565b9050818103602083015261247281856121d2565b9050818103604083015261248681846123d0565b9050949350505050565b60006060820190506124a5600083018661169e565b6124b2602083018561169e565b6124bf604083018461157d565b949350505050565b60006060820190506124dc600083018661169e565b6124e9602083018561157d565b81810360408301526124fb81846121d2565b9050949350505050565b82818337600083830152505050565b6000612520838561172f565b935061252d838584612505565b6125368361176a565b840190509392505050565b82818337505050565b61255660608383612541565b5050565b600081519050919050565b600082825260208201905092915050565b60006125818261255a565b61258b8185612565565b935061259b818560208601611740565b6125a48161176a565b840191505092915050565b600060c08201905081810360008301526125ca818789612514565b90506125d9602083018661254a565b6125e660808301856117c0565b81810360a08301526125f88184612576565b90509695505050505050565b600081519050612613816114fe565b92915050565b60006020828403121561262f5761262e6113da565b5b600061263d84828501612604565b91505092915050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006126a260338361172f565b91506126ad82612646565b604082019050919050565b600060208201905081810360008301526126d181612695565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061273460248361172f565b915061273f826126d8565b604082019050919050565b6000602082019050818103600083015261276381612727565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006127a060188361172f565b91506127ab8261276a565b602082019050919050565b600060208201905081810360008301526127cf81612793565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612832603a8361172f565b915061283d826127d6565b604082019050919050565b6000602082019050818103600083015261286181612825565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261289357612892612868565b5b80830191505092915050565b6128a8816122b8565b81146128b357600080fd5b50565b600081356128c38161289f565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612905846128cc565b9350801983169250808416831791505092915050565b600061293661293161292c846122b8565b611ce8565b6122b8565b9050919050565b6000819050919050565b6129508261291b565b61296361295c8261293d565b83546128d9565b8255505050565b6000808335600160200384360303811261298757612986612868565b5b80840192508235915067ffffffffffffffff8211156129a9576129a861286d565b5b6020830192506001820236038313156129c5576129c4612872565b5b509250929050565b6129d8838383611e10565b505050565b6000810160008301806129ef816128b6565b90506129fb8184612947565b5050506001810160208301612a10818561296a565b612a1b8183866129cd565b505050505050565b612a2d82826129dd565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612a67601a8361172f565b9150612a7282612a31565b602082019050919050565b60006020820190508181036000830152612a9681612a5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ad7826114f4565b9150612ae2836114f4565b925082612af257612af1612a9d565b5b82820690509291505056fea26469706673582212204753a1bfd0544b67fec12074efcbf6917581147c623802bfea5e76bb04e06aad64736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/ethereum/contract-addresses.json b/ethereum/contract-addresses.json index f3e468c..ed5d238 100644 --- a/ethereum/contract-addresses.json +++ b/ethereum/contract-addresses.json @@ -1,9 +1,11 @@ { "localhost": { - "DAO": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", - "Work1": "0xfe58B9EB03F75A603de1B286584f5E9532ab8fB5", - "Onboarding": "0x1d63FDe5B461106729fE1e5e38A02fc68C518Af5", - "Proposals": "0x050C420Cc4995B41217Eba1B54B82Fd5687e9139" + "DAO": "0x431c73b38B9eBe4a30C7A0ffa11188fa9429Bf38", + "Work1": "0x0173903444ed92F5e30f522d0f274162c57b4Cc0", + "Onboarding": "0x44df3b45C937c88267999a5f69D9BFBe83dEf447", + "Proposals": "0x663f119ffb7eD161A00C89c25046Afe8B40fff52", + "Rollup": "0xB61bB0defB5A0B59F0BAeBF2F4345d7c317c20B4", + "Work2": "0x4774670f82A590e7eD6072bd7098836B06FFd8ce" }, "sepolia": { "DAO": "0x8e5bd58B2ca8910C5F9be8de847d6883B15c60d2", diff --git a/ethereum/contracts/RollableWork.sol b/ethereum/contracts/RollableWork.sol index 969dead..e61bc97 100644 --- a/ethereum/contracts/RollableWork.sol +++ b/ethereum/contracts/RollableWork.sol @@ -10,8 +10,8 @@ abstract contract RollableWork is Work { constructor( DAO dao, Proposals proposalsContract, - uint price, - Rollup rollupContract_ + Rollup rollupContract_, + uint price ) Work(dao, proposalsContract, price) { rollupContract = rollupContract_; } diff --git a/ethereum/contracts/Work2.sol b/ethereum/contracts/Work2.sol new file mode 100644 index 0000000..ec75b06 --- /dev/null +++ b/ethereum/contracts/Work2.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: Unlicense +pragma solidity ^0.8.24; + +import "./core/DAO.sol"; +import "./RollableWork.sol"; +import "./Proposals.sol"; +import "./Rollup.sol"; + +contract Work2 is RollableWork { + constructor( + DAO dao, + Proposals proposals, + Rollup rollup, + uint price + ) RollableWork(dao, proposals, rollup, price) {} +} diff --git a/ethereum/scripts/deploy.js b/ethereum/scripts/deploy.js index a2bacf8..c4c68be 100644 --- a/ethereum/scripts/deploy.js +++ b/ethereum/scripts/deploy.js @@ -1,12 +1,15 @@ -const deployWorkContract = require('./util/deploy-work-contract'); const deployContract = require('./util/deploy-contract'); const deployDAOContract = require('./util/deploy-dao-contract'); +const deployWorkContract = require('./util/deploy-work-contract'); +const deployRollableWorkContract = require('./util/deploy-rollable-work-contract'); async function main() { await deployContract('DAO', [], true); + await deployDAOContract('Rollup'); await deployDAOContract('Proposals'); await deployWorkContract('Work1'); await deployWorkContract('Onboarding'); + await deployRollableWorkContract('Work2'); } main().catch((error) => { diff --git a/ethereum/scripts/util/deploy-rollable-work-contract.js b/ethereum/scripts/util/deploy-rollable-work-contract.js new file mode 100644 index 0000000..fb103fe --- /dev/null +++ b/ethereum/scripts/util/deploy-rollable-work-contract.js @@ -0,0 +1,22 @@ +const { ethers } = require('hardhat'); +const deployContract = require('./deploy-contract'); + +const contractAddresses = require('../../contract-addresses.json'); + +require('dotenv').config(); + +const network = process.env.HARDHAT_NETWORK; + +const deployRollableWorkContract = async (name) => { + const priceEnvVar = `${name.toUpperCase()}_PRICE`; + const price = ethers.parseEther(process.env[priceEnvVar] || '0.001'); + + await deployContract(name, [ + contractAddresses[network].DAO, + contractAddresses[network].Proposals, + contractAddresses[network].Rollup, + price, + ]); +}; + +module.exports = deployRollableWorkContract; diff --git a/ethereum/scripts/util/deploy-work-contract.js b/ethereum/scripts/util/deploy-work-contract.js index 1f7b263..fbdf458 100644 --- a/ethereum/scripts/util/deploy-work-contract.js +++ b/ethereum/scripts/util/deploy-work-contract.js @@ -9,7 +9,7 @@ const network = process.env.HARDHAT_NETWORK; const deployWorkContract = async (name) => { const priceEnvVar = `${name.toUpperCase()}_PRICE`; - const price = ethers.parseEther(process.env[priceEnvVar] || 0.001); + const price = ethers.parseEther(process.env[priceEnvVar] || '0.001'); await deployContract(name, [ contractAddresses[network].DAO, diff --git a/frontend/contract-addresses.json b/frontend/contract-addresses.json index f3e468c..ed5d238 100644 --- a/frontend/contract-addresses.json +++ b/frontend/contract-addresses.json @@ -1,9 +1,11 @@ { "localhost": { - "DAO": "0x8d914D38dD301FC4606f5aa9fEcF8A76389020d3", - "Work1": "0xfe58B9EB03F75A603de1B286584f5E9532ab8fB5", - "Onboarding": "0x1d63FDe5B461106729fE1e5e38A02fc68C518Af5", - "Proposals": "0x050C420Cc4995B41217Eba1B54B82Fd5687e9139" + "DAO": "0x431c73b38B9eBe4a30C7A0ffa11188fa9429Bf38", + "Work1": "0x0173903444ed92F5e30f522d0f274162c57b4Cc0", + "Onboarding": "0x44df3b45C937c88267999a5f69D9BFBe83dEf447", + "Proposals": "0x663f119ffb7eD161A00C89c25046Afe8B40fff52", + "Rollup": "0xB61bB0defB5A0B59F0BAeBF2F4345d7c317c20B4", + "Work2": "0x4774670f82A590e7eD6072bd7098836B06FFd8ce" }, "sepolia": { "DAO": "0x8e5bd58B2ca8910C5F9be8de847d6883B15c60d2", diff --git a/frontend/contractArtifacts/DAO.json b/frontend/contractArtifacts/DAO.json index c9d6490..d6cd706 100644 --- a/frontend/contractArtifacts/DAO.json +++ b/frontend/contractArtifacts/DAO.json @@ -211,7 +211,7 @@ }, { "internalType": "string", - "name": "contentId", + "name": "postId", "type": "string" }, { @@ -364,6 +364,29 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "forwardAllowance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -820,8 +843,8 @@ "type": "function" } ], - "bytecode": "0x60806040526003600c556040518060400160405280600160ff168152602001600a60ff16815250600f90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b615f3980620004b96000396000f3fe60806040526004361061014b5760003560e01c806370a08231116100b6578063a23362791161006f578063a2336279146104e7578063a9059cbb1461052f578063da66863a1461056c578063dd62ed3e146105a9578063e5b4d827146105e6578063f8300fca1461060f5761014b565b806370a08231146103ac57806388380274146103e957806395d89b4114610426578063975762b3146104515780639fbe7c731461047a578063a230c524146104aa5761014b565b806323b872dd1161010857806323b872dd146102765780632d17c062146102b3578063313ce567146102dc57806350cde8ef146103075780635daf08ca14610344578063642b5bfb146103815761014b565b806306fdde0314610150578063095ea7b31461017b57806311aee380146101b857806317906c2e146101e357806317c182171461020e57806318160ddd1461024b575b600080fd5b34801561015c57600080fd5b5061016561064e565b6040516101729190613b5e565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190613c28565b6106e0565b6040516101af9190613c83565b60405180910390f35b3480156101c457600080fd5b506101cd610703565b6040516101da9190613cad565b60405180910390f35b3480156101ef57600080fd5b506101f8610709565b6040516102059190613cad565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613cc8565b61070f565b6040516102429190613c83565b60405180910390f35b34801561025757600080fd5b506102606110f1565b60405161026d9190613cad565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613cf5565b6110fb565b6040516102aa9190613c83565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613d74565b611138565b005b3480156102e857600080fd5b506102f1611161565b6040516102fe9190613de3565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613cc8565b61116a565b60405161033b9190613b5e565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613cc8565b611216565b6040516103789190613e0d565b60405180910390f35b34801561038d57600080fd5b50610396611249565b6040516103a39190613cad565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613e28565b61124f565b6040516103e09190613cad565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613e55565b611297565b60405161041d9190613c83565b60405180910390f35b34801561043257600080fd5b5061043b61131e565b6040516104489190613b5e565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613ea8565b6113b0565b005b610494600480360381019061048f9190613fec565b6113e5565b6040516104a19190613cad565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613e28565b61189f565b6040516104de9190613c83565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613cc8565b6118bf565b6040516105269c9b9a9998979695949392919061425c565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613c28565b611b39565b6040516105639190613c83565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190614326565b611b76565b6040516105a09190614460565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614482565b611c5f565b6040516105dd9190613cad565b60405180910390f35b3480156105f257600080fd5b5061060d6004803603810190610608919061456e565b611ce6565b005b34801561061b57600080fd5b5061063660048036038101906106319190614752565b6121b9565b6040516106459392919061479b565b60405180910390f35b60606003805461065d90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461068990614808565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b6000806106eb6122a1565b90506106f88185856122a9565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff1615151461077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690614885565b60405180910390fd5b600080600080600090505b84600501548110156107fb5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107db578160020154846107d491906148d4565b93506107ee565b8160020154836107eb91906148d4565b92505b808060010191505061078a565b506002846003015461080d9190614937565b8361081891906148d4565b92506002846003015461082b9190614937565b8261083691906148d4565b915060006002856003015461084b9190614968565b146108605760018361085d91906148d4565b92505b83600e015442118061088357506108756110f1565b828461088191906148d4565b145b6108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990614a0b565b60405180910390fd5b836006016001016000600281106108dc576108db614a2b565b5b01546108e66110f1565b6108f09190614a5a565b82846108fc91906148d4565b8560060160010160016002811061091657610915614a2b565b5b01546109229190614a5a565b11610a5257600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de818660008060405161097893929190614a9c565b60405180910390a183600f0160029054906101000a900460ff1615610a45578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a00959493929190614b6c565b6020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614bdb565b505b60009450505050506110ec565b83600601600301600060028110610a6c57610a6b614a2b565b5b01548284610a7a91906148d4565b610a849190614a5a565b84600601600301600160028110610a9e57610a9d614a2b565b5b015484610aab9190614a5a565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b1c93929190614a9c565b60405180910390a1600085610b315782610b33565b835b905060008060005b8760050154811015610c3b5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c2e576000606489600601600501548760020154610b959190614a5a565b610b9f9190614937565b90508860060160060160009054906101000a900460ff1615610bfd57610bea8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630836122bb565b8084610bf691906148d4565b9350610c2c565b610c2b8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124e0565b5b505b8080600101915050610b3b565b508715610e3d5760028760030154610c539190614937565b82610c5e91906148d4565b915060005b8760050154811015610d495787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cbb57508460010160009054906101000a900460ff161515891515145b15610d3c5760006064896006016005015486886002015487610cdd9190614a5a565b610ce79190614937565b610cf19190614a5a565b610cfb9190614937565b90508083610d0991906148d4565b9250610d3a308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122bb565b505b8080600101915050610c63565b5060008183610d589190614c08565b9050600060028960030154610d6d9190614968565b14610d8257600181610d7f91906148d4565b90505b610e36886001018054610d9490614808565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc090614808565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b50505050508260028b60030154610e249190614937565b610e2e91906148d4565b600080612562565b5050610f55565b866003015482610e4d91906148d4565b915060005b8760050154811015610f535787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eaa57508460010160009054906101000a900460ff161515891515145b15610f465760006064896006016005015460028b60030154610ecc9190614937565b87610ed79190614c08565b886002015487610ee79190614a5a565b610ef19190614937565b610efb9190614a5a565b610f059190614937565b90508083610f1391906148d4565b9250610f44308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122bb565b505b8080600101915050610e52565b505b60005b60065481101561101e5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fa46110f1565b610fad8361124f565b8b600d0154610fbc9190614a5a565b610fc69190614937565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561100e573d6000803e3d6000fd5b5050508080600101915050610f58565b5086600f0160029054906101000a900460ff16156110e4578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b815260040161109f959493929190614b6c565b6020604051808303816000875af11580156110be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190614bdb565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90614c88565b60405180910390fd5b6000600d6000858152602001908152602001600020905061115b8133858561310a565b50505050565b60006009905090565b6009818154811061117a57600080fd5b90600052602060002001600091509050805461119590614808565b80601f01602080910402602001604051908101604052809291908181526020018280546111c190614808565b801561120e5780601f106111e35761010080835404028352916020019161120e565b820191906000526020600020905b8154815290600101906020018083116111f157829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a43385856122a9565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016112e193929190614ca8565b600060405180830381600087803b1580156112fb57600080fd5b505af115801561130f573d6000803e3d6000fd5b50505050600190509392505050565b60606004805461132d90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461135990614808565b80156113a65780601f1061137b576101008083540402835291602001916113a6565b820191906000526020600020905b81548152906001019060200180831161138957829003601f168201915b5050505050905090565b6000600d600086815260200190815260200160002090506113d2843385613200565b6113de8185858561310a565b5050505050565b6000803411611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090614d51565b60405180910390fd5b600189101561146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614dbd565b60405180910390fd5b651cae8c13e0008911156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90614e29565b60405180910390fd5b876001600281106114ca576114c9614a2b565b5b6020020135600f6000600281106114e4576114e3614a2b565b5b01546114f09190614a5a565b8860006002811061150457611503614a2b565b5b6020020135600f60016002811061151e5761151d614a2b565b5b015461152a9190614a5a565b101561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290614e95565b60405180910390fd5b8760016002811061157f5761157e614a2b565b5b60200201358860006002811061159857611597614a2b565b5b602002013511156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590614f01565b60405180910390fd5b866001600281106115f2576115f1614a2b565b5b60200201358760006002811061160b5761160a614a2b565b5b60200201351115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890614f6d565b60405180910390fd5b6064861115611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90614fd9565b60405180910390fd5b600060088c8c6040516116a9929190615029565b908152602001604051809103902090506000816002018054905003611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061508e565b60405180910390fd5b600e6000815480929190611716906150ae565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c8260010191826117899291906152ad565b503481600d018190555089816006016001019060026117a9929190613a71565b5088816006016003019060026117c0929190613a71565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a4261180491906148d4565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118449291906153ce565b5061184f3034613294565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118879190613cad565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090508060000154908060010180546118e890614808565b80601f016020809104026020016040519081016040528092919081815260200182805461191490614808565b80156119615780601f1061193657610100808354040283529160200191611961565b820191906000526020600020905b81548152906001019060200180831161194457829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156119ee576020028201915b8154815260200190600101908083116119da575b5050505050815260200160038201600280602002604051908101604052809291908260028015611a33576020028201915b815481526020019060010190808311611a1f575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ab690614808565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae290614808565b8015611b2f5780601f10611b0457610100808354040283529160200191611b2f565b820191906000526020600020905b815481529060010190602001808311611b1257829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614c88565b60405180910390fd5b6060600060088484604051611b8c929190615029565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611c525783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611bc0565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390615510565b60405180910390fd5b600a6000815480929190611d3f906150ae565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611d819291906152ad565b50600060088585604051611d96929190615029565b908152602001604051809103902090506000816002018054905014611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de7906155a2565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611e469291906152ad565b50600080600090505b88889050811015611ee557888882818110611e6d57611e6c614a2b565b5b9050604002016000013582611e8291906148d4565b915082600201898983818110611e9b57611e9a614a2b565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611ed6919061574f565b50508080600101915050611e4f565b50620f42408114611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f22906157cf565b60405180910390fd5b60005b84849050811015611fa65782600301858583818110611f5057611f4f614a2b565b5b9050602002810190611f6291906157fe565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f979190615965565b50508080600101915050611f2e565b5060008060005b84600301805490508110156120ca576000856003018281548110611fd457611fd3614a2b565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc081121561204b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612042906159e5565b60405180910390fd5b620f4240811315612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208890615a77565b60405180910390fd5b60008113156120ad5780846120a69190615a97565b93506120bc565b80836120b99190615a97565b92505b508080600101915050611fad565b50620f4240821315612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890615b4d565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b90615bdf565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af24972788886040516121a5929190615c2c565b60405180910390a150505050505050505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546121f290614808565b80601f016020809104026020016040519081016040528092919081815260200182805461221e90614808565b801561226b5780601f106122405761010080835404028352916020019161226b565b820191906000526020600020905b81548152906001019060200180831161224e57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b6122b68383836001613316565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361230d57806002600082825461230191906148d4565b925050819055506123e0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612399578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161239093929190614ca8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124295780600260008282540392505081905550612476565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d39190613cad565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125525760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125499190613e0d565b60405180910390fd5b61255e826000836122bb565b5050565b6000600c54821061257557839050613102565b60006008866040516125879190615c81565b9081526020016040518091039020905060008160020180549050036125af5784915050613102565b60005b81600301805490508110156126e35760008260030182815481106125d9576125d8614a2b565b5b90600052602060002090600202016000015412156126d6576126c88783600301838154811061260b5761260a614a2b565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461263e90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461266a90614808565b80156126b75780601f1061268c576101008083540402835291602001916126b7565b820191906000526020600020905b81548152906001019060200180831161269a57829003601f168201915b5050505050815250508888886134ed565b866126d39190615c98565b95505b80806001019150506125b2565b5060005b816003018054905081101561281857600082600301828154811061270e5761270d614a2b565b5b906000526020600020906002020160000154131561280b576127fd878360030183815481106127405761273f614a2b565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461277390614808565b80601f016020809104026020016040519081016040528092919081815260200182805461279f90614808565b80156127ec5780601f106127c1576101008083540402835291602001916127ec565b820191906000526020600020905b8154815290600101906020018083116127cf57829003601f168201915b5050505050815250508888886134ed565b866128089190615c98565b95505b80806001019150506126e7565b506000851315612b0457612ae3816040518060a001604052908160008201805461284190614808565b80601f016020809104026020016040519081016040528092919081815260200182805461286d90614808565b80156128ba5780601f1061288f576101008083540402835291602001916128ba565b820191906000526020600020905b81548152906001019060200180831161289d57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156129d05783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508152602001906001019061293e565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612acb578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a3a90614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6690614808565b8015612ab35780601f10612a8857610100808354040283529160200191612ab3565b820191906000526020600020905b815481529060010190602001808311612a9657829003601f168201915b505050505081525050815260200190600101906129fd565b505050508152602001600482015481525050866136b8565b5084816004016000828254612af891906148d4565b92505081905550613100565b6000858260040154612b169190615a97565b12612e0757612ddc816040518060a0016040529081600082018054612b3a90614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6690614808565b8015612bb35780601f10612b8857610100808354040283529160200191612bb3565b820191906000526020600020905b815481529060010190602001808311612b9657829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612cc95783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612c37565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612dc4578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612d3390614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5f90614808565b8015612dac5780601f10612d8157610100808354040283529160200191612dac565b820191906000526020600020905b815481529060010190602001808311612d8f57829003601f168201915b50505050508152505081526020019060010190612cf6565b505050508152602001600482015481525050866136b8565b915084612de890615cdb565b816004016000828254612dfb9190614c08565b925050819055506130ff565b848160040154612e179190615a97565b91506130e7816040518060a0016040529081600082018054612e3890614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612e6490614808565b8015612eb15780601f10612e8657610100808354040283529160200191612eb1565b820191906000526020600020905b815481529060010190602001808311612e9457829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612fc75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612f35565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156130c257838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461303190614808565b80601f016020809104026020016040519081016040528092919081815260200182805461305d90614808565b80156130aa5780601f1061307f576101008083540402835291602001916130aa565b820191906000526020600020905b81548152906001019060200180831161308d57829003601f168201915b50505050508152505081526020019060010190612ff4565b50505050815260200160048201548152505082600401546130e290615cdb565b6136b8565b826130f29190615a97565b9150600081600401819055505b5b505b949350505050565b83600e0154421115613151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314890615d6f565b60405180910390fd5b6000846005016000815480929190613168906150ae565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600061320c8484611c5f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461328e578181101561327e578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161327593929190614ca8565b60405180910390fd5b61328d84848484036000613316565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133065760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016132fd9190613e0d565b60405180910390fd5b613312600083836122bb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036133885760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161337f9190613e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133fa5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016133f19190613e0d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156134e7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516134de9190613cad565b60405180910390a35b50505050565b6000620f42408560000151856135039190615d8f565b61350d9190615e07565b905060008560200151510361356f576000811215613560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355790615ee3565b60405180910390fd5b61356a30826124e0565b6136af565b6000600b876040516135819190615c81565b908152602001604051809103902086602001516040516135a19190615c81565b9081526020016040518091039020549050831561360e5760008212156135e957806135cb90615cdb565b82136135e057806135db90615cdb565b6135e2565b815b915061360d565b806135f390615cdb565b8212613608578061360390615cdb565b61360a565b815b91505b5b600061364787602001518487806136355750600087148015613634575060008a60000151125b5b60018861364291906148d4565b612562565b905080836136559190615c98565b925082600b896040516136689190615c81565b908152602001604051809103902088602001516040516136889190615c81565b908152602001604051809103902060008282546136a59190615a97565b9250508190555050505b95945050505050565b60008060005b846040015151811015613812576000856040015182815181106136e4576136e3614a2b565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138045780600560006006600081548092919061375b906150ae565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806001019150506136be565b5060005b846040015151811015613a695760008560400151828151811061383c5761383b614a2b565b5b602002602001015190506000600187604001515161385a9190614c08565b83101561389457620f42408260000151876138759190615d8f565b61387f9190615e07565b9050808461388d9190615a97565b93506138a3565b83866138a09190615c98565b90505b60008113156139de576138bb308360200151836122bb565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139d9578160200151600560006006600081548092919061392c906150ae565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613a5a565b806139e890615cdb565b6139f5836020015161124f565b1015613a4057613a08826020015161124f565b81613a139190615a97565b85613a1e9190615a97565b9450613a3b826020015130613a36856020015161124f565b6122bb565b613a59565b613a5882602001513083613a5390615cdb565b6122bb565b5b5b50508080600101915050613816565b505092915050565b8260028101928215613aa0579160200282015b82811115613a9f578235825591602001919060010190613a84565b5b509050613aad9190613ab1565b5090565b5b80821115613aca576000816000905550600101613ab2565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b08578082015181840152602081019050613aed565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b3082613ace565b613b3a8185613ad9565b9350613b4a818560208601613aea565b613b5381613b14565b840191505092915050565b60006020820190508181036000830152613b788184613b25565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bbf82613b94565b9050919050565b613bcf81613bb4565b8114613bda57600080fd5b50565b600081359050613bec81613bc6565b92915050565b6000819050919050565b613c0581613bf2565b8114613c1057600080fd5b50565b600081359050613c2281613bfc565b92915050565b60008060408385031215613c3f57613c3e613b8a565b5b6000613c4d85828601613bdd565b9250506020613c5e85828601613c13565b9150509250929050565b60008115159050919050565b613c7d81613c68565b82525050565b6000602082019050613c986000830184613c74565b92915050565b613ca781613bf2565b82525050565b6000602082019050613cc26000830184613c9e565b92915050565b600060208284031215613cde57613cdd613b8a565b5b6000613cec84828501613c13565b91505092915050565b600080600060608486031215613d0e57613d0d613b8a565b5b6000613d1c86828701613bdd565b9350506020613d2d86828701613bdd565b9250506040613d3e86828701613c13565b9150509250925092565b613d5181613c68565b8114613d5c57600080fd5b50565b600081359050613d6e81613d48565b92915050565b600080600060608486031215613d8d57613d8c613b8a565b5b6000613d9b86828701613c13565b9350506020613dac86828701613c13565b9250506040613dbd86828701613d5f565b9150509250925092565b600060ff82169050919050565b613ddd81613dc7565b82525050565b6000602082019050613df86000830184613dd4565b92915050565b613e0781613bb4565b82525050565b6000602082019050613e226000830184613dfe565b92915050565b600060208284031215613e3e57613e3d613b8a565b5b6000613e4c84828501613bdd565b91505092915050565b600080600060608486031215613e6e57613e6d613b8a565b5b6000613e7c86828701613bdd565b9350506020613e8d86828701613c13565b9250506040613e9e86828701613c13565b9150509250925092565b60008060008060808587031215613ec257613ec1613b8a565b5b6000613ed087828801613c13565b9450506020613ee187828801613bdd565b9350506040613ef287828801613c13565b9250506060613f0387828801613d5f565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613f3457613f33613f0f565b5b8235905067ffffffffffffffff811115613f5157613f50613f14565b5b602083019150836001820283011115613f6d57613f6c613f19565b5b9250929050565b600081905082602060020282011115613f9057613f8f613f19565b5b92915050565b60008083601f840112613fac57613fab613f0f565b5b8235905067ffffffffffffffff811115613fc957613fc8613f14565b5b602083019150836001820283011115613fe557613fe4613f19565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140105761400f613b8a565b5b60008b013567ffffffffffffffff81111561402e5761402d613b8f565b5b61403a8d828e01613f1e565b9a509a5050602061404d8d828e01613c13565b985050604061405e8d828e01613f74565b975050608061406f8d828e01613f74565b96505060c06140808d828e01613c13565b95505060e06140918d828e01613d5f565b9450506101006140a38d828e01613d5f565b9350506101208b013567ffffffffffffffff8111156140c5576140c4613b8f565b5b6140d18d828e01613f96565b92509250509295989b9194979a5092959850565b6140ee81613bf2565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061412083836140e5565b60208301905092915050565b6000602082019050919050565b614142816140f4565b61414c81846140ff565b92506141578261410a565b8060005b8381101561418857815161416f8782614114565b965061417a8361412c565b92505060018101905061415b565b505050505050565b61419981613c68565b82525050565b60e0820160008201516141b560008501826140e5565b5060208201516141c86020850182614139565b5060408201516141db6060850182614139565b5060608201516141ee60a08501826140e5565b50608082015161420160c0850182614190565b50505050565b600081519050919050565b600082825260208201905092915050565b600061422e82614207565b6142388185614212565b9350614248818560208601613aea565b61425181613b14565b840191505092915050565b600061024082019050614272600083018f613c9e565b8181036020830152614284818e613b25565b9050614293604083018d613dfe565b6142a0606083018c613c9e565b6142ad608083018b613c9e565b6142ba60a083018a61419f565b6142c8610180830189613c9e565b6142d66101a0830188613c9e565b6142e46101c0830187613c74565b6142f26101e0830186613c74565b614300610200830185613c74565b8181036102208301526143138184614223565b90509d9c50505050505050505050505050565b6000806020838503121561433d5761433c613b8a565b5b600083013567ffffffffffffffff81111561435b5761435a613b8f565b5b61436785828601613f1e565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143a881613bb4565b82525050565b6040820160008201516143c460008501826140e5565b5060208201516143d7602085018261439f565b50505050565b60006143e983836143ae565b60408301905092915050565b6000602082019050919050565b600061440d82614373565b614417818561437e565b93506144228361438f565b8060005b8381101561445357815161443a88826143dd565b9750614445836143f5565b925050600181019050614426565b5085935050505092915050565b6000602082019050818103600083015261447a8184614402565b905092915050565b6000806040838503121561449957614498613b8a565b5b60006144a785828601613bdd565b92505060206144b885828601613bdd565b9150509250929050565b60008083601f8401126144d8576144d7613f0f565b5b8235905067ffffffffffffffff8111156144f5576144f4613f14565b5b60208301915083604082028301111561451157614510613f19565b5b9250929050565b60008083601f84011261452e5761452d613f0f565b5b8235905067ffffffffffffffff81111561454b5761454a613f14565b5b60208301915083602082028301111561456757614566613f19565b5b9250929050565b6000806000806000806060878903121561458b5761458a613b8a565b5b600087013567ffffffffffffffff8111156145a9576145a8613b8f565b5b6145b589828a016144c2565b9650965050602087013567ffffffffffffffff8111156145d8576145d7613b8f565b5b6145e489828a01613f1e565b9450945050604087013567ffffffffffffffff81111561460757614606613b8f565b5b61461389828a01614518565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61465f82613b14565b810181811067ffffffffffffffff8211171561467e5761467d614627565b5b80604052505050565b6000614691613b80565b905061469d8282614656565b919050565b600067ffffffffffffffff8211156146bd576146bc614627565b5b6146c682613b14565b9050602081019050919050565b82818337600083830152505050565b60006146f56146f0846146a2565b614687565b90508281526020810184848401111561471157614710614622565b5b61471c8482856146d3565b509392505050565b600082601f83011261473957614738613f0f565b5b81356147498482602086016146e2565b91505092915050565b60006020828403121561476857614767613b8a565b5b600082013567ffffffffffffffff81111561478657614785613b8f565b5b61479284828501614724565b91505092915050565b600060608201905081810360008301526147b58186613b25565b90506147c46020830185613dfe565b6147d16040830184613c9e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482057607f821691505b602082108103614833576148326147d9565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061486f601883613ad9565b915061487a82614839565b602082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148df82613bf2565b91506148ea83613bf2565b9250828201905080821115614902576149016148a5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061494282613bf2565b915061494d83613bf2565b92508261495d5761495c614908565b5b828204905092915050565b600061497382613bf2565b915061497e83613bf2565b92508261498e5761498d614908565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f5602183613ad9565b9150614a0082614999565b604082019050919050565b60006020820190508181036000830152614a24816149e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a6582613bf2565b9150614a7083613bf2565b9250828202614a7e81613bf2565b91508282048414831517614a9557614a946148a5565b5b5092915050565b6000606082019050614ab16000830186613c9e565b614abe6020830185613c74565b614acb6040830184613c74565b949350505050565b60008190508160005260206000209050919050565b60008154614af581614808565b614aff8186614212565b94506001821660008114614b1a5760018114614b3057614b63565b60ff198316865281151560200286019350614b63565b614b3985614ad3565b60005b83811015614b5b57815481890152600182019150602081019050614b3c565b808801955050505b50505092915050565b600060a082019050614b816000830188613c74565b614b8e6020830187613c74565b614b9b6040830186613c9e565b614ba86060830185613c9e565b8181036080830152614bba8184614ae8565b90509695505050505050565b600081519050614bd581613bfc565b92915050565b600060208284031215614bf157614bf0613b8a565b5b6000614bff84828501614bc6565b91505092915050565b6000614c1382613bf2565b9150614c1e83613bf2565b9250828203905081811115614c3657614c356148a5565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614c72601b83613ad9565b9150614c7d82614c3c565b602082019050919050565b60006020820190508181036000830152614ca181614c65565b9050919050565b6000606082019050614cbd6000830186613dfe565b614cca6020830185613c9e565b614cd76040830184613c9e565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614d3b602b83613ad9565b9150614d4682614cdf565b604082019050919050565b60006020820190508181036000830152614d6a81614d2e565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614da7601583613ad9565b9150614db282614d71565b602082019050919050565b60006020820190508181036000830152614dd681614d9a565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614e13601483613ad9565b9150614e1e82614ddd565b602082019050919050565b60006020820190508181036000830152614e4281614e06565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614e7f601783613ad9565b9150614e8a82614e49565b602082019050919050565b60006020820190508181036000830152614eae81614e72565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614eeb601a83613ad9565b9150614ef682614eb5565b602082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614f57601d83613ad9565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614fc3601e83613ad9565b9150614fce82614f8d565b602082019050919050565b60006020820190508181036000830152614ff281614fb6565b9050919050565b600081905092915050565b60006150108385614ff9565b935061501d8385846146d3565b82840190509392505050565b6000615036828486615004565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000615078601583613ad9565b915061508382615042565b602082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b60006150b982613bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150eb576150ea6148a5565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615126565b61516d8683615126565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151aa6151a56151a084613bf2565b615185565b613bf2565b9050919050565b6000819050919050565b6151c48361518f565b6151d86151d0826151b1565b848454615133565b825550505050565b600090565b6151ed6151e0565b6151f88184846151bb565b505050565b5b8181101561521c576152116000826151e5565b6001810190506151fe565b5050565b601f8211156152615761523281615101565b61523b84615116565b8101602085101561524a578190505b61525e61525685615116565b8301826151fd565b50505b505050565b600082821c905092915050565b600061528460001984600802615266565b1980831691505092915050565b600061529d8383615273565b9150826002028217905092915050565b6152b783836150f6565b67ffffffffffffffff8111156152d0576152cf614627565b5b6152da8254614808565b6152e5828285615220565b6000601f8311600181146153145760008415615302578287013590505b61530c8582615291565b865550615374565b601f19841661532286615101565b60005b8281101561534a57848901358255600182019150602085019450602081019050615325565b868310156153675784890135615363601f891682615273565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f8211156153c95761539a81614ad3565b6153a384615116565b810160208510156153b2578190505b6153c66153be85615116565b8301826151fd565b50505b505050565b6153d8838361537d565b67ffffffffffffffff8111156153f1576153f0614627565b5b6153fb8254614808565b615406828285615388565b6000601f8311600181146154355760008415615423578287013590505b61542d8582615291565b865550615495565b601f19841661544386614ad3565b60005b8281101561546b57848901358255600182019150602085019450602081019050615446565b868310156154885784890135615484601f891682615273565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b60006154fa602583613ad9565b91506155058261549e565b604082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b600061558c602983613ad9565b915061559782615530565b604082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b600081356155cf81613bfc565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615611846155d8565b9350801983169250808416831791505092915050565b6156308261518f565b61564361563c826151b1565b83546155e5565b8255505050565b6000813561565781613bc6565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff615680846155d8565b9350801983169250808416831791505092915050565b60006156b16156ac6156a784613b94565b615185565b613b94565b9050919050565b60006156c382615696565b9050919050565b60006156d5826156b8565b9050919050565b6000819050919050565b6156ef826156ca565b6157026156fb826156dc565b8354615660565b8255505050565b60008101600083018061571b816155c2565b90506157278184615627565b50505060018101602083018061573c8161564a565b905061574881846156e6565b5050505050565b6157598282615709565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006157b9602283613ad9565b91506157c48261575d565b604082019050919050565b600060208201905081810360008301526157e8816157ac565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261581a576158196157ef565b5b80830191505092915050565b6000819050919050565b61583981615826565b811461584457600080fd5b50565b6000813561585481615830565b80915050919050565b600061587861587361586e84615826565b615185565b615826565b9050919050565b6000819050919050565b6158928261585d565b6158a561589e8261587f565b83546155e5565b8255505050565b600080833560016020038436030381126158c9576158c86157ef565b5b80840192508235915067ffffffffffffffff8211156158eb576158ea6157f4565b5b602083019250600182023603831315615907576159066157f9565b5b509250929050565b61591a8383836152ad565b505050565b60008101600083018061593181615847565b905061593d8184615889565b505050600181016020830161595281856158ac565b61595d81838661590f565b505050505050565b61596f828261591f565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b60006159cf602883613ad9565b91506159da82615973565b604082019050919050565b600060208201905081810360008301526159fe816159c2565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615a61602783613ad9565b9150615a6c82615a05565b604082019050919050565b60006020820190508181036000830152615a9081615a54565b9050919050565b6000615aa282615826565b9150615aad83615826565b925082820190508281121560008312168382126000841215161715615ad557615ad46148a5565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615b37602c83613ad9565b9150615b4282615adb565b604082019050919050565b60006020820190508181036000830152615b6681615b2a565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615bc9602d83613ad9565b9150615bd482615b6d565b604082019050919050565b60006020820190508181036000830152615bf881615bbc565b9050919050565b6000615c0b8385613ad9565b9350615c188385846146d3565b615c2183613b14565b840190509392505050565b60006020820190508181036000830152615c47818486615bff565b90509392505050565b6000615c5b82613ace565b615c658185614ff9565b9350615c75818560208601613aea565b80840191505092915050565b6000615c8d8284615c50565b915081905092915050565b6000615ca382615826565b9150615cae83615826565b9250828203905081811260008412168282136000851215161715615cd557615cd46148a5565b5b92915050565b6000615ce682615826565b91507f80000000000000000000000000000000000000000000000000000000000000008203615d1857615d176148a5565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615d59601883613ad9565b9150615d6482615d23565b602082019050919050565b60006020820190508181036000830152615d8881615d4c565b9050919050565b6000615d9a82615826565b9150615da583615826565b9250828202615db381615826565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615deb57615dea6148a5565b5b8282058414831517615e0057615dff6148a5565b5b5092915050565b6000615e1282615826565b9150615e1d83615826565b925082615e2d57615e2c614908565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615e6657615e656148a5565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615ecd602683613ad9565b9150615ed882615e71565b604082019050919050565b60006020820190508181036000830152615efc81615ec0565b905091905056fea264697066735822122014513cb1a0064db5c9629f88dfa2833b84407c3037a2b10d20a5061ea1aa744664736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061014b5760003560e01c806370a08231116100b6578063a23362791161006f578063a2336279146104e7578063a9059cbb1461052f578063da66863a1461056c578063dd62ed3e146105a9578063e5b4d827146105e6578063f8300fca1461060f5761014b565b806370a08231146103ac57806388380274146103e957806395d89b4114610426578063975762b3146104515780639fbe7c731461047a578063a230c524146104aa5761014b565b806323b872dd1161010857806323b872dd146102765780632d17c062146102b3578063313ce567146102dc57806350cde8ef146103075780635daf08ca14610344578063642b5bfb146103815761014b565b806306fdde0314610150578063095ea7b31461017b57806311aee380146101b857806317906c2e146101e357806317c182171461020e57806318160ddd1461024b575b600080fd5b34801561015c57600080fd5b5061016561064e565b6040516101729190613b5e565b60405180910390f35b34801561018757600080fd5b506101a2600480360381019061019d9190613c28565b6106e0565b6040516101af9190613c83565b60405180910390f35b3480156101c457600080fd5b506101cd610703565b6040516101da9190613cad565b60405180910390f35b3480156101ef57600080fd5b506101f8610709565b6040516102059190613cad565b60405180910390f35b34801561021a57600080fd5b5061023560048036038101906102309190613cc8565b61070f565b6040516102429190613c83565b60405180910390f35b34801561025757600080fd5b506102606110f1565b60405161026d9190613cad565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613cf5565b6110fb565b6040516102aa9190613c83565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190613d74565b611138565b005b3480156102e857600080fd5b506102f1611161565b6040516102fe9190613de3565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613cc8565b61116a565b60405161033b9190613b5e565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190613cc8565b611216565b6040516103789190613e0d565b60405180910390f35b34801561038d57600080fd5b50610396611249565b6040516103a39190613cad565b60405180910390f35b3480156103b857600080fd5b506103d360048036038101906103ce9190613e28565b61124f565b6040516103e09190613cad565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613e55565b611297565b60405161041d9190613c83565b60405180910390f35b34801561043257600080fd5b5061043b61131e565b6040516104489190613b5e565b60405180910390f35b34801561045d57600080fd5b5061047860048036038101906104739190613ea8565b6113b0565b005b610494600480360381019061048f9190613fec565b6113e5565b6040516104a19190613cad565b60405180910390f35b3480156104b657600080fd5b506104d160048036038101906104cc9190613e28565b61189f565b6040516104de9190613c83565b60405180910390f35b3480156104f357600080fd5b5061050e60048036038101906105099190613cc8565b6118bf565b6040516105269c9b9a9998979695949392919061425c565b60405180910390f35b34801561053b57600080fd5b5061055660048036038101906105519190613c28565b611b39565b6040516105639190613c83565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e9190614326565b611b76565b6040516105a09190614460565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190614482565b611c5f565b6040516105dd9190613cad565b60405180910390f35b3480156105f257600080fd5b5061060d6004803603810190610608919061456e565b611ce6565b005b34801561061b57600080fd5b5061063660048036038101906106319190614752565b6121b9565b6040516106459392919061479b565b60405180910390f35b60606003805461065d90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461068990614808565b80156106d65780601f106106ab576101008083540402835291602001916106d6565b820191906000526020600020905b8154815290600101906020018083116106b957829003601f168201915b5050505050905090565b6000806106eb6122a1565b90506106f88185856122a9565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff1615151461077f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077690614885565b60405180910390fd5b600080600080600090505b84600501548110156107fb5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff16156107db578160020154846107d491906148d4565b93506107ee565b8160020154836107eb91906148d4565b92505b808060010191505061078a565b506002846003015461080d9190614937565b8361081891906148d4565b92506002846003015461082b9190614937565b8261083691906148d4565b915060006002856003015461084b9190614968565b146108605760018361085d91906148d4565b92505b83600e015442118061088357506108756110f1565b828461088191906148d4565b145b6108c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b990614a0b565b60405180910390fd5b836006016001016000600281106108dc576108db614a2b565b5b01546108e66110f1565b6108f09190614a5a565b82846108fc91906148d4565b8560060160010160016002811061091657610915614a2b565b5b01546109229190614a5a565b11610a5257600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de818660008060405161097893929190614a9c565b60405180910390a183600f0160029054906101000a900460ff1615610a45578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a00959493929190614b6c565b6020604051808303816000875af1158015610a1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a439190614bdb565b505b60009450505050506110ec565b83600601600301600060028110610a6c57610a6b614a2b565b5b01548284610a7a91906148d4565b610a849190614a5a565b84600601600301600160028110610a9e57610a9d614a2b565b5b015484610aab9190614a5a565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b1c93929190614a9c565b60405180910390a1600085610b315782610b33565b835b905060008060005b8760050154811015610c3b5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c2e576000606489600601600501548760020154610b959190614a5a565b610b9f9190614937565b90508860060160060160009054906101000a900460ff1615610bfd57610bea8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1630836122bb565b8084610bf691906148d4565b9350610c2c565b610c2b8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826124e0565b5b505b8080600101915050610b3b565b508715610e3d5760028760030154610c539190614937565b82610c5e91906148d4565b915060005b8760050154811015610d495787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cbb57508460010160009054906101000a900460ff161515891515145b15610d3c5760006064896006016005015486886002015487610cdd9190614a5a565b610ce79190614937565b610cf19190614a5a565b610cfb9190614937565b90508083610d0991906148d4565b9250610d3a308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122bb565b505b8080600101915050610c63565b5060008183610d589190614c08565b9050600060028960030154610d6d9190614968565b14610d8257600181610d7f91906148d4565b90505b610e36886001018054610d9490614808565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc090614808565b8015610e0d5780601f10610de257610100808354040283529160200191610e0d565b820191906000526020600020905b815481529060010190602001808311610df057829003601f168201915b50505050508260028b60030154610e249190614937565b610e2e91906148d4565b600080612562565b5050610f55565b866003015482610e4d91906148d4565b915060005b8760050154811015610f535787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eaa57508460010160009054906101000a900460ff161515891515145b15610f465760006064896006016005015460028b60030154610ecc9190614937565b87610ed79190614c08565b886002015487610ee79190614a5a565b610ef19190614937565b610efb9190614a5a565b610f059190614937565b90508083610f1391906148d4565b9250610f44308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836122bb565b505b8080600101915050610e52565b505b60005b60065481101561101e5760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fa46110f1565b610fad8361124f565b8b600d0154610fbc9190614a5a565b610fc69190614937565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561100e573d6000803e3d6000fd5b5050508080600101915050610f58565b5086600f0160029054906101000a900460ff16156110e4578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b815260040161109f959493929190614b6c565b6020604051808303816000875af11580156110be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e29190614bdb565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112f90614c88565b60405180910390fd5b6000600d6000858152602001908152602001600020905061115b8133858561310a565b50505050565b60006009905090565b6009818154811061117a57600080fd5b90600052602060002001600091509050805461119590614808565b80601f01602080910402602001604051908101604052809291908181526020018280546111c190614808565b801561120e5780601f106111e35761010080835404028352916020019161120e565b820191906000526020600020905b8154815290600101906020018083116111f157829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006112a43385856122a9565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b81526004016112e193929190614ca8565b600060405180830381600087803b1580156112fb57600080fd5b505af115801561130f573d6000803e3d6000fd5b50505050600190509392505050565b60606004805461132d90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461135990614808565b80156113a65780601f1061137b576101008083540402835291602001916113a6565b820191906000526020600020905b81548152906001019060200180831161138957829003601f168201915b5050505050905090565b6000600d600086815260200190815260200160002090506113d2843385613200565b6113de8185858561310a565b5050505050565b6000803411611429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142090614d51565b60405180910390fd5b600189101561146d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146490614dbd565b60405180910390fd5b651cae8c13e0008911156114b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ad90614e29565b60405180910390fd5b876001600281106114ca576114c9614a2b565b5b6020020135600f6000600281106114e4576114e3614a2b565b5b01546114f09190614a5a565b8860006002811061150457611503614a2b565b5b6020020135600f60016002811061151e5761151d614a2b565b5b015461152a9190614a5a565b101561156b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156290614e95565b60405180910390fd5b8760016002811061157f5761157e614a2b565b5b60200201358860006002811061159857611597614a2b565b5b602002013511156115de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d590614f01565b60405180910390fd5b866001600281106115f2576115f1614a2b565b5b60200201358760006002811061160b5761160a614a2b565b5b60200201351115611651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164890614f6d565b60405180910390fd5b6064861115611695576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168c90614fd9565b60405180910390fd5b600060088c8c6040516116a9929190615029565b908152602001604051809103902090506000816002018054905003611703576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116fa9061508e565b60405180910390fd5b600e6000815480929190611716906150ae565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c8260010191826117899291906152ad565b503481600d018190555089816006016001019060026117a9929190613a71565b5088816006016003019060026117c0929190613a71565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a4261180491906148d4565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118449291906153ce565b5061184f3034613294565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a836040516118879190613cad565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090508060000154908060010180546118e890614808565b80601f016020809104026020016040519081016040528092919081815260200182805461191490614808565b80156119615780601f1061193657610100808354040283529160200191611961565b820191906000526020600020905b81548152906001019060200180831161194457829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a001604052908160008201548152602001600182016002806020026040519081016040528092919082600280156119ee576020028201915b8154815260200190600101908083116119da575b5050505050815260200160038201600280602002604051908101604052809291908260028015611a33576020028201915b815481526020019060010190808311611a1f575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611ab690614808565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae290614808565b8015611b2f5780601f10611b0457610100808354040283529160200191611b2f565b820191906000526020600020905b815481529060010190602001808311611b1257829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d90614c88565b60405180910390fd5b6060600060088484604051611b8c929190615029565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611c525783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611bc0565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390615510565b60405180910390fd5b600a6000815480929190611d3f906150ae565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611d819291906152ad565b50600060088585604051611d96929190615029565b908152602001604051809103902090506000816002018054905014611df0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de7906155a2565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611e469291906152ad565b50600080600090505b88889050811015611ee557888882818110611e6d57611e6c614a2b565b5b9050604002016000013582611e8291906148d4565b915082600201898983818110611e9b57611e9a614a2b565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611ed6919061574f565b50508080600101915050611e4f565b50620f42408114611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f22906157cf565b60405180910390fd5b60005b84849050811015611fa65782600301858583818110611f5057611f4f614a2b565b5b9050602002810190611f6291906157fe565b90806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f979190615965565b50508080600101915050611f2e565b5060008060005b84600301805490508110156120ca576000856003018281548110611fd457611fd3614a2b565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc081121561204b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612042906159e5565b60405180910390fd5b620f4240811315612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208890615a77565b60405180910390fd5b60008113156120ad5780846120a69190615a97565b93506120bc565b80836120b99190615a97565b92505b508080600101915050611fad565b50620f4240821315612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890615b4d565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b90615bdf565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af24972788886040516121a5929190615c2c565b60405180910390a150505050505050505050565b6008818051602081018201805184825260208301602085012081835280955050505050506000915090508060000180546121f290614808565b80601f016020809104026020016040519081016040528092919081815260200182805461221e90614808565b801561226b5780601f106122405761010080835404028352916020019161226b565b820191906000526020600020905b81548152906001019060200180831161224e57829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b6122b68383836001613316565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361230d57806002600082825461230191906148d4565b925050819055506123e0565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612399578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161239093929190614ca8565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124295780600260008282540392505081905550612476565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516124d39190613cad565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125525760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125499190613e0d565b60405180910390fd5b61255e826000836122bb565b5050565b6000600c54821061257557839050613102565b60006008866040516125879190615c81565b9081526020016040518091039020905060008160020180549050036125af5784915050613102565b60005b81600301805490508110156126e35760008260030182815481106125d9576125d8614a2b565b5b90600052602060002090600202016000015412156126d6576126c88783600301838154811061260b5761260a614a2b565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461263e90614808565b80601f016020809104026020016040519081016040528092919081815260200182805461266a90614808565b80156126b75780601f1061268c576101008083540402835291602001916126b7565b820191906000526020600020905b81548152906001019060200180831161269a57829003601f168201915b5050505050815250508888886134ed565b866126d39190615c98565b95505b80806001019150506125b2565b5060005b816003018054905081101561281857600082600301828154811061270e5761270d614a2b565b5b906000526020600020906002020160000154131561280b576127fd878360030183815481106127405761273f614a2b565b5b90600052602060002090600202016040518060400160405290816000820154815260200160018201805461277390614808565b80601f016020809104026020016040519081016040528092919081815260200182805461279f90614808565b80156127ec5780601f106127c1576101008083540402835291602001916127ec565b820191906000526020600020905b8154815290600101906020018083116127cf57829003601f168201915b5050505050815250508888886134ed565b866128089190615c98565b95505b80806001019150506126e7565b506000851315612b0457612ae3816040518060a001604052908160008201805461284190614808565b80601f016020809104026020016040519081016040528092919081815260200182805461286d90614808565b80156128ba5780601f1061288f576101008083540402835291602001916128ba565b820191906000526020600020905b81548152906001019060200180831161289d57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b828210156129d05783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508152602001906001019061293e565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612acb578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612a3a90614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612a6690614808565b8015612ab35780601f10612a8857610100808354040283529160200191612ab3565b820191906000526020600020905b815481529060010190602001808311612a9657829003601f168201915b505050505081525050815260200190600101906129fd565b505050508152602001600482015481525050866136b8565b5084816004016000828254612af891906148d4565b92505081905550613100565b6000858260040154612b169190615a97565b12612e0757612ddc816040518060a0016040529081600082018054612b3a90614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612b6690614808565b8015612bb35780601f10612b8857610100808354040283529160200191612bb3565b820191906000526020600020905b815481529060010190602001808311612b9657829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612cc95783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612c37565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612dc4578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612d3390614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612d5f90614808565b8015612dac5780601f10612d8157610100808354040283529160200191612dac565b820191906000526020600020905b815481529060010190602001808311612d8f57829003601f168201915b50505050508152505081526020019060010190612cf6565b505050508152602001600482015481525050866136b8565b915084612de890615cdb565b816004016000828254612dfb9190614c08565b925050819055506130ff565b848160040154612e179190615a97565b91506130e7816040518060a0016040529081600082018054612e3890614808565b80601f0160208091040260200160405190810160405280929190818152602001828054612e6490614808565b8015612eb15780601f10612e8657610100808354040283529160200191612eb1565b820191906000526020600020905b815481529060010190602001808311612e9457829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612fc75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612f35565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156130c257838290600052602060002090600202016040518060400160405290816000820154815260200160018201805461303190614808565b80601f016020809104026020016040519081016040528092919081815260200182805461305d90614808565b80156130aa5780601f1061307f576101008083540402835291602001916130aa565b820191906000526020600020905b81548152906001019060200180831161308d57829003601f168201915b50505050508152505081526020019060010190612ff4565b50505050815260200160048201548152505082600401546130e290615cdb565b6136b8565b826130f29190615a97565b9150600081600401819055505b5b505b949350505050565b83600e0154421115613151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161314890615d6f565b60405180910390fd5b6000846005016000815480929190613168906150ae565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b600061320c8484611c5f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461328e578181101561327e578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161327593929190614ca8565b60405180910390fd5b61328d84848484036000613316565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133065760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016132fd9190613e0d565b60405180910390fd5b613312600083836122bb565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036133885760006040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161337f9190613e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133fa5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016133f19190613e0d565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555080156134e7578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516134de9190613cad565b60405180910390a35b50505050565b6000620f42408560000151856135039190615d8f565b61350d9190615e07565b905060008560200151510361356f576000811215613560576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355790615ee3565b60405180910390fd5b61356a30826124e0565b6136af565b6000600b876040516135819190615c81565b908152602001604051809103902086602001516040516135a19190615c81565b9081526020016040518091039020549050831561360e5760008212156135e957806135cb90615cdb565b82136135e057806135db90615cdb565b6135e2565b815b915061360d565b806135f390615cdb565b8212613608578061360390615cdb565b61360a565b815b91505b5b600061364787602001518487806136355750600087148015613634575060008a60000151125b5b60018861364291906148d4565b612562565b905080836136559190615c98565b925082600b896040516136689190615c81565b908152602001604051809103902088602001516040516136889190615c81565b908152602001604051809103902060008282546136a59190615a97565b9250508190555050505b95945050505050565b60008060005b846040015151811015613812576000856040015182815181106136e4576136e3614a2b565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138045780600560006006600081548092919061375b906150ae565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080806001019150506136be565b5060005b846040015151811015613a695760008560400151828151811061383c5761383b614a2b565b5b602002602001015190506000600187604001515161385a9190614c08565b83101561389457620f42408260000151876138759190615d8f565b61387f9190615e07565b9050808461388d9190615a97565b93506138a3565b83866138a09190615c98565b90505b60008113156139de576138bb308360200151836122bb565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166139d9578160200151600560006006600081548092919061392c906150ae565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613a5a565b806139e890615cdb565b6139f5836020015161124f565b1015613a4057613a08826020015161124f565b81613a139190615a97565b85613a1e9190615a97565b9450613a3b826020015130613a36856020015161124f565b6122bb565b613a59565b613a5882602001513083613a5390615cdb565b6122bb565b5b5b50508080600101915050613816565b505092915050565b8260028101928215613aa0579160200282015b82811115613a9f578235825591602001919060010190613a84565b5b509050613aad9190613ab1565b5090565b5b80821115613aca576000816000905550600101613ab2565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b08578082015181840152602081019050613aed565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b3082613ace565b613b3a8185613ad9565b9350613b4a818560208601613aea565b613b5381613b14565b840191505092915050565b60006020820190508181036000830152613b788184613b25565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bbf82613b94565b9050919050565b613bcf81613bb4565b8114613bda57600080fd5b50565b600081359050613bec81613bc6565b92915050565b6000819050919050565b613c0581613bf2565b8114613c1057600080fd5b50565b600081359050613c2281613bfc565b92915050565b60008060408385031215613c3f57613c3e613b8a565b5b6000613c4d85828601613bdd565b9250506020613c5e85828601613c13565b9150509250929050565b60008115159050919050565b613c7d81613c68565b82525050565b6000602082019050613c986000830184613c74565b92915050565b613ca781613bf2565b82525050565b6000602082019050613cc26000830184613c9e565b92915050565b600060208284031215613cde57613cdd613b8a565b5b6000613cec84828501613c13565b91505092915050565b600080600060608486031215613d0e57613d0d613b8a565b5b6000613d1c86828701613bdd565b9350506020613d2d86828701613bdd565b9250506040613d3e86828701613c13565b9150509250925092565b613d5181613c68565b8114613d5c57600080fd5b50565b600081359050613d6e81613d48565b92915050565b600080600060608486031215613d8d57613d8c613b8a565b5b6000613d9b86828701613c13565b9350506020613dac86828701613c13565b9250506040613dbd86828701613d5f565b9150509250925092565b600060ff82169050919050565b613ddd81613dc7565b82525050565b6000602082019050613df86000830184613dd4565b92915050565b613e0781613bb4565b82525050565b6000602082019050613e226000830184613dfe565b92915050565b600060208284031215613e3e57613e3d613b8a565b5b6000613e4c84828501613bdd565b91505092915050565b600080600060608486031215613e6e57613e6d613b8a565b5b6000613e7c86828701613bdd565b9350506020613e8d86828701613c13565b9250506040613e9e86828701613c13565b9150509250925092565b60008060008060808587031215613ec257613ec1613b8a565b5b6000613ed087828801613c13565b9450506020613ee187828801613bdd565b9350506040613ef287828801613c13565b9250506060613f0387828801613d5f565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613f3457613f33613f0f565b5b8235905067ffffffffffffffff811115613f5157613f50613f14565b5b602083019150836001820283011115613f6d57613f6c613f19565b5b9250929050565b600081905082602060020282011115613f9057613f8f613f19565b5b92915050565b60008083601f840112613fac57613fab613f0f565b5b8235905067ffffffffffffffff811115613fc957613fc8613f14565b5b602083019150836001820283011115613fe557613fe4613f19565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140105761400f613b8a565b5b60008b013567ffffffffffffffff81111561402e5761402d613b8f565b5b61403a8d828e01613f1e565b9a509a5050602061404d8d828e01613c13565b985050604061405e8d828e01613f74565b975050608061406f8d828e01613f74565b96505060c06140808d828e01613c13565b95505060e06140918d828e01613d5f565b9450506101006140a38d828e01613d5f565b9350506101208b013567ffffffffffffffff8111156140c5576140c4613b8f565b5b6140d18d828e01613f96565b92509250509295989b9194979a5092959850565b6140ee81613bf2565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b600061412083836140e5565b60208301905092915050565b6000602082019050919050565b614142816140f4565b61414c81846140ff565b92506141578261410a565b8060005b8381101561418857815161416f8782614114565b965061417a8361412c565b92505060018101905061415b565b505050505050565b61419981613c68565b82525050565b60e0820160008201516141b560008501826140e5565b5060208201516141c86020850182614139565b5060408201516141db6060850182614139565b5060608201516141ee60a08501826140e5565b50608082015161420160c0850182614190565b50505050565b600081519050919050565b600082825260208201905092915050565b600061422e82614207565b6142388185614212565b9350614248818560208601613aea565b61425181613b14565b840191505092915050565b600061024082019050614272600083018f613c9e565b8181036020830152614284818e613b25565b9050614293604083018d613dfe565b6142a0606083018c613c9e565b6142ad608083018b613c9e565b6142ba60a083018a61419f565b6142c8610180830189613c9e565b6142d66101a0830188613c9e565b6142e46101c0830187613c74565b6142f26101e0830186613c74565b614300610200830185613c74565b8181036102208301526143138184614223565b90509d9c50505050505050505050505050565b6000806020838503121561433d5761433c613b8a565b5b600083013567ffffffffffffffff81111561435b5761435a613b8f565b5b61436785828601613f1e565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6143a881613bb4565b82525050565b6040820160008201516143c460008501826140e5565b5060208201516143d7602085018261439f565b50505050565b60006143e983836143ae565b60408301905092915050565b6000602082019050919050565b600061440d82614373565b614417818561437e565b93506144228361438f565b8060005b8381101561445357815161443a88826143dd565b9750614445836143f5565b925050600181019050614426565b5085935050505092915050565b6000602082019050818103600083015261447a8184614402565b905092915050565b6000806040838503121561449957614498613b8a565b5b60006144a785828601613bdd565b92505060206144b885828601613bdd565b9150509250929050565b60008083601f8401126144d8576144d7613f0f565b5b8235905067ffffffffffffffff8111156144f5576144f4613f14565b5b60208301915083604082028301111561451157614510613f19565b5b9250929050565b60008083601f84011261452e5761452d613f0f565b5b8235905067ffffffffffffffff81111561454b5761454a613f14565b5b60208301915083602082028301111561456757614566613f19565b5b9250929050565b6000806000806000806060878903121561458b5761458a613b8a565b5b600087013567ffffffffffffffff8111156145a9576145a8613b8f565b5b6145b589828a016144c2565b9650965050602087013567ffffffffffffffff8111156145d8576145d7613b8f565b5b6145e489828a01613f1e565b9450945050604087013567ffffffffffffffff81111561460757614606613b8f565b5b61461389828a01614518565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61465f82613b14565b810181811067ffffffffffffffff8211171561467e5761467d614627565b5b80604052505050565b6000614691613b80565b905061469d8282614656565b919050565b600067ffffffffffffffff8211156146bd576146bc614627565b5b6146c682613b14565b9050602081019050919050565b82818337600083830152505050565b60006146f56146f0846146a2565b614687565b90508281526020810184848401111561471157614710614622565b5b61471c8482856146d3565b509392505050565b600082601f83011261473957614738613f0f565b5b81356147498482602086016146e2565b91505092915050565b60006020828403121561476857614767613b8a565b5b600082013567ffffffffffffffff81111561478657614785613b8f565b5b61479284828501614724565b91505092915050565b600060608201905081810360008301526147b58186613b25565b90506147c46020830185613dfe565b6147d16040830184613c9e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482057607f821691505b602082108103614833576148326147d9565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b600061486f601883613ad9565b915061487a82614839565b602082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148df82613bf2565b91506148ea83613bf2565b9250828201905080821115614902576149016148a5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061494282613bf2565b915061494d83613bf2565b92508261495d5761495c614908565b5b828204905092915050565b600061497382613bf2565b915061497e83613bf2565b92508261498e5761498d614908565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b60006149f5602183613ad9565b9150614a0082614999565b604082019050919050565b60006020820190508181036000830152614a24816149e8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614a6582613bf2565b9150614a7083613bf2565b9250828202614a7e81613bf2565b91508282048414831517614a9557614a946148a5565b5b5092915050565b6000606082019050614ab16000830186613c9e565b614abe6020830185613c74565b614acb6040830184613c74565b949350505050565b60008190508160005260206000209050919050565b60008154614af581614808565b614aff8186614212565b94506001821660008114614b1a5760018114614b3057614b63565b60ff198316865281151560200286019350614b63565b614b3985614ad3565b60005b83811015614b5b57815481890152600182019150602081019050614b3c565b808801955050505b50505092915050565b600060a082019050614b816000830188613c74565b614b8e6020830187613c74565b614b9b6040830186613c9e565b614ba86060830185613c9e565b8181036080830152614bba8184614ae8565b90509695505050505050565b600081519050614bd581613bfc565b92915050565b600060208284031215614bf157614bf0613b8a565b5b6000614bff84828501614bc6565b91505092915050565b6000614c1382613bf2565b9150614c1e83613bf2565b9250828203905081811115614c3657614c356148a5565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614c72601b83613ad9565b9150614c7d82614c3c565b602082019050919050565b60006020820190508181036000830152614ca181614c65565b9050919050565b6000606082019050614cbd6000830186613dfe565b614cca6020830185613c9e565b614cd76040830184613c9e565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614d3b602b83613ad9565b9150614d4682614cdf565b604082019050919050565b60006020820190508181036000830152614d6a81614d2e565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614da7601583613ad9565b9150614db282614d71565b602082019050919050565b60006020820190508181036000830152614dd681614d9a565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614e13601483613ad9565b9150614e1e82614ddd565b602082019050919050565b60006020820190508181036000830152614e4281614e06565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614e7f601783613ad9565b9150614e8a82614e49565b602082019050919050565b60006020820190508181036000830152614eae81614e72565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614eeb601a83613ad9565b9150614ef682614eb5565b602082019050919050565b60006020820190508181036000830152614f1a81614ede565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614f57601d83613ad9565b9150614f6282614f21565b602082019050919050565b60006020820190508181036000830152614f8681614f4a565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000614fc3601e83613ad9565b9150614fce82614f8d565b602082019050919050565b60006020820190508181036000830152614ff281614fb6565b9050919050565b600081905092915050565b60006150108385614ff9565b935061501d8385846146d3565b82840190509392505050565b6000615036828486615004565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b6000615078601583613ad9565b915061508382615042565b602082019050919050565b600060208201905081810360008301526150a78161506b565b9050919050565b60006150b982613bf2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036150eb576150ea6148a5565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026151637fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82615126565b61516d8683615126565b95508019841693508086168417925050509392505050565b6000819050919050565b60006151aa6151a56151a084613bf2565b615185565b613bf2565b9050919050565b6000819050919050565b6151c48361518f565b6151d86151d0826151b1565b848454615133565b825550505050565b600090565b6151ed6151e0565b6151f88184846151bb565b505050565b5b8181101561521c576152116000826151e5565b6001810190506151fe565b5050565b601f8211156152615761523281615101565b61523b84615116565b8101602085101561524a578190505b61525e61525685615116565b8301826151fd565b50505b505050565b600082821c905092915050565b600061528460001984600802615266565b1980831691505092915050565b600061529d8383615273565b9150826002028217905092915050565b6152b783836150f6565b67ffffffffffffffff8111156152d0576152cf614627565b5b6152da8254614808565b6152e5828285615220565b6000601f8311600181146153145760008415615302578287013590505b61530c8582615291565b865550615374565b601f19841661532286615101565b60005b8281101561534a57848901358255600182019150602085019450602081019050615325565b868310156153675784890135615363601f891682615273565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f8211156153c95761539a81614ad3565b6153a384615116565b810160208510156153b2578190505b6153c66153be85615116565b8301826151fd565b50505b505050565b6153d8838361537d565b67ffffffffffffffff8111156153f1576153f0614627565b5b6153fb8254614808565b615406828285615388565b6000601f8311600181146154355760008415615423578287013590505b61542d8582615291565b865550615495565b601f19841661544386614ad3565b60005b8281101561546b57848901358255600182019150602085019450602081019050615446565b868310156154885784890135615484601f891682615273565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b60006154fa602583613ad9565b91506155058261549e565b604082019050919050565b60006020820190508181036000830152615529816154ed565b9050919050565b7f4120706f73742077697468207468697320636f6e74656e74496420616c72656160008201527f6479206578697374730000000000000000000000000000000000000000000000602082015250565b600061558c602983613ad9565b915061559782615530565b604082019050919050565b600060208201905081810360008301526155bb8161557f565b9050919050565b600081356155cf81613bfc565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff615611846155d8565b9350801983169250808416831791505092915050565b6156308261518f565b61564361563c826151b1565b83546155e5565b8255505050565b6000813561565781613bc6565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff615680846155d8565b9350801983169250808416831791505092915050565b60006156b16156ac6156a784613b94565b615185565b613b94565b9050919050565b60006156c382615696565b9050919050565b60006156d5826156b8565b9050919050565b6000819050919050565b6156ef826156ca565b6157026156fb826156dc565b8354615660565b8255505050565b60008101600083018061571b816155c2565b90506157278184615627565b50505060018101602083018061573c8161564a565b905061574881846156e6565b5050505050565b6157598282615709565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b60006157b9602283613ad9565b91506157c48261575d565b604082019050919050565b600060208201905081810360008301526157e8816157ac565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261581a576158196157ef565b5b80830191505092915050565b6000819050919050565b61583981615826565b811461584457600080fd5b50565b6000813561585481615830565b80915050919050565b600061587861587361586e84615826565b615185565b615826565b9050919050565b6000819050919050565b6158928261585d565b6158a561589e8261587f565b83546155e5565b8255505050565b600080833560016020038436030381126158c9576158c86157ef565b5b80840192508235915067ffffffffffffffff8211156158eb576158ea6157f4565b5b602083019250600182023603831315615907576159066157f9565b5b509250929050565b61591a8383836152ad565b505050565b60008101600083018061593181615847565b905061593d8184615889565b505050600181016020830161595281856158ac565b61595d81838661590f565b505050505050565b61596f828261591f565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b60006159cf602883613ad9565b91506159da82615973565b604082019050919050565b600060208201905081810360008301526159fe816159c2565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615a61602783613ad9565b9150615a6c82615a05565b604082019050919050565b60006020820190508181036000830152615a9081615a54565b9050919050565b6000615aa282615826565b9150615aad83615826565b925082820190508281121560008312168382126000841215161715615ad557615ad46148a5565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615b37602c83613ad9565b9150615b4282615adb565b604082019050919050565b60006020820190508181036000830152615b6681615b2a565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615bc9602d83613ad9565b9150615bd482615b6d565b604082019050919050565b60006020820190508181036000830152615bf881615bbc565b9050919050565b6000615c0b8385613ad9565b9350615c188385846146d3565b615c2183613b14565b840190509392505050565b60006020820190508181036000830152615c47818486615bff565b90509392505050565b6000615c5b82613ace565b615c658185614ff9565b9350615c75818560208601613aea565b80840191505092915050565b6000615c8d8284615c50565b915081905092915050565b6000615ca382615826565b9150615cae83615826565b9250828203905081811260008412168282136000851215161715615cd557615cd46148a5565b5b92915050565b6000615ce682615826565b91507f80000000000000000000000000000000000000000000000000000000000000008203615d1857615d176148a5565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615d59601883613ad9565b9150615d6482615d23565b602082019050919050565b60006020820190508181036000830152615d8881615d4c565b9050919050565b6000615d9a82615826565b9150615da583615826565b9250828202615db381615826565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615deb57615dea6148a5565b5b8282058414831517615e0057615dff6148a5565b5b5092915050565b6000615e1282615826565b9150615e1d83615826565b925082615e2d57615e2c614908565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615e6657615e656148a5565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615ecd602683613ad9565b9150615ed882615e71565b604082019050919050565b60006020820190508181036000830152615efc81615ec0565b905091905056fea264697066735822122014513cb1a0064db5c9629f88dfa2833b84407c3037a2b10d20a5061ea1aa744664736f6c63430008180033", + "bytecode": "0x60806040526003600c556040518060400160405280600160ff168152602001600a60ff16815250600f90600262000038929190620000df565b503480156200004657600080fd5b506040518060400160405280600a81526020017f52657075746174696f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f52455000000000000000000000000000000000000000000000000000000000008152508160039081620000c49190620003c2565b508060049081620000d69190620003c2565b505050620004a9565b826002810192821562000116579160200282015b8281111562000115578251829060ff16905591602001919060010190620000f3565b5b50905062000125919062000129565b5090565b5b80821115620001445760008160009055506001016200012a565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620001ca57607f821691505b602082108103620001e057620001df62000182565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200024a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200020b565b6200025686836200020b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620002a36200029d62000297846200026e565b62000278565b6200026e565b9050919050565b6000819050919050565b620002bf8362000282565b620002d7620002ce82620002aa565b84845462000218565b825550505050565b600090565b620002ee620002df565b620002fb818484620002b4565b505050565b5b81811015620003235762000317600082620002e4565b60018101905062000301565b5050565b601f82111562000372576200033c81620001e6565b6200034784620001fb565b8101602085101562000357578190505b6200036f6200036685620001fb565b83018262000300565b50505b505050565b600082821c905092915050565b6000620003976000198460080262000377565b1980831691505092915050565b6000620003b2838362000384565b9150826002028217905092915050565b620003cd8262000148565b67ffffffffffffffff811115620003e957620003e862000153565b5b620003f58254620001b1565b6200040282828562000327565b600060209050601f8311600181146200043a576000841562000425578287015190505b620004318582620003a4565b865550620004a1565b601f1984166200044a86620001e6565b60005b8281101562000474578489015182556001820191506020850194506020810190506200044d565b8683101562000494578489015162000490601f89168262000384565b8355505b6001600288020188555050505b505050505050565b615fde80620004b96000396000f3fe6080604052600436106101665760003560e01c8063642b5bfb116100d1578063a230c5241161008a578063da66863a11610064578063da66863a146105b0578063dd62ed3e146105ed578063e5b4d8271461062a578063f8300fca1461065357610166565b8063a230c524146104ee578063a23362791461052b578063a9059cbb1461057357610166565b8063642b5bfb146103c557806370a08231146103f0578063883802741461042d57806395d89b411461046a578063975762b3146104955780639fbe7c73146104be57610166565b806323b872dd1161012357806323b872dd146102915780632d17c062146102ce578063313ce567146102f757806350cde8ef146103225780635daf08ca1461035f5780635ffc70041461039c57610166565b806306fdde031461016b578063095ea7b31461019657806311aee380146101d357806317906c2e146101fe57806317c182171461022957806318160ddd14610266575b600080fd5b34801561017757600080fd5b50610180610692565b60405161018d9190613c03565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190613ccd565b610724565b6040516101ca9190613d28565b60405180910390f35b3480156101df57600080fd5b506101e8610747565b6040516101f59190613d52565b60405180910390f35b34801561020a57600080fd5b5061021361074d565b6040516102209190613d52565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613d6d565b610753565b60405161025d9190613d28565b60405180910390f35b34801561027257600080fd5b5061027b611135565b6040516102889190613d52565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190613d9a565b61113f565b6040516102c59190613d28565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613e19565b61117c565b005b34801561030357600080fd5b5061030c6111a5565b6040516103199190613e88565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613d6d565b6111ae565b6040516103569190613c03565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613d6d565b61125a565b6040516103939190613eb2565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613d9a565b61128d565b005b3480156103d157600080fd5b506103da6112bc565b6040516103e79190613d52565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613ecd565b6112c2565b6040516104249190613d52565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613efa565b61130a565b6040516104619190613d28565b60405180910390f35b34801561047657600080fd5b5061047f6113a5565b60405161048c9190613c03565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613f4d565b611437565b005b6104d860048036038101906104d39190614091565b61148a565b6040516104e59190613d52565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613ecd565b611944565b6040516105229190613d28565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613d6d565b611964565b60405161056a9c9b9a99989796959493929190614301565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613ccd565b611bde565b6040516105a79190613d28565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906143cb565b611c1b565b6040516105e49190614505565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190614527565b611d04565b6040516106219190613d52565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190614613565b611d8b565b005b34801561065f57600080fd5b5061067a600480360381019061067591906147f7565b61225e565b60405161068993929190614840565b60405180910390f35b6060600380546106a1906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546106cd906148ad565b801561071a5780601f106106ef5761010080835404028352916020019161071a565b820191906000526020600020905b8154815290600101906020018083116106fd57829003601f168201915b5050505050905090565b60008061072f612346565b905061073c81858561234e565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff161515146107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba9061492a565b60405180910390fd5b600080600080600090505b846005015481101561083f5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561081f578160020154846108189190614979565b9350610832565b81600201548361082f9190614979565b92505b80806001019150506107ce565b506002846003015461085191906149dc565b8361085c9190614979565b92506002846003015461086f91906149dc565b8261087a9190614979565b915060006002856003015461088f9190614a0d565b146108a4576001836108a19190614979565b92505b83600e01544211806108c757506108b9611135565b82846108c59190614979565b145b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90614ab0565b60405180910390fd5b836006016001016000600281106109205761091f614ad0565b5b015461092a611135565b6109349190614aff565b82846109409190614979565b8560060160010160016002811061095a57610959614ad0565b5b01546109669190614aff565b11610a9657600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81866000806040516109bc93929190614b41565b60405180910390a183600f0160029054906101000a900460ff1615610a89578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a44959493929190614c11565b6020604051808303816000875af1158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614c80565b505b6000945050505050611130565b83600601600301600060028110610ab057610aaf614ad0565b5b01548284610abe9190614979565b610ac89190614aff565b84600601600301600160028110610ae257610ae1614ad0565b5b015484610aef9190614aff565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b6093929190614b41565b60405180910390a1600085610b755782610b77565b835b905060008060005b8760050154811015610c7f5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c72576000606489600601600501548760020154610bd99190614aff565b610be391906149dc565b90508860060160060160009054906101000a900460ff1615610c4157610c2e8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612360565b8084610c3a9190614979565b9350610c70565b610c6f8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612585565b5b505b8080600101915050610b7f565b508715610e815760028760030154610c9791906149dc565b82610ca29190614979565b915060005b8760050154811015610d8d5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cff57508460010160009054906101000a900460ff161515891515145b15610d805760006064896006016005015486886002015487610d219190614aff565b610d2b91906149dc565b610d359190614aff565b610d3f91906149dc565b90508083610d4d9190614979565b9250610d7e308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610ca7565b5060008183610d9c9190614cad565b9050600060028960030154610db19190614a0d565b14610dc657600181610dc39190614979565b90505b610e7a886001018054610dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e04906148ad565b8015610e515780601f10610e2657610100808354040283529160200191610e51565b820191906000526020600020905b815481529060010190602001808311610e3457829003601f168201915b50505050508260028b60030154610e6891906149dc565b610e729190614979565b600080612607565b5050610f99565b866003015482610e919190614979565b915060005b8760050154811015610f975787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eee57508460010160009054906101000a900460ff161515891515145b15610f8a5760006064896006016005015460028b60030154610f1091906149dc565b87610f1b9190614cad565b886002015487610f2b9190614aff565b610f3591906149dc565b610f3f9190614aff565b610f4991906149dc565b90508083610f579190614979565b9250610f88308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610e96565b505b60005b6006548110156110625760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fe8611135565b610ff1836112c2565b8b600d01546110009190614aff565b61100a91906149dc565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611052573d6000803e3d6000fd5b5050508080600101915050610f9c565b5086600f0160029054906101000a900460ff1615611128578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b81526004016110e3959493929190614c11565b6020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190614c80565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390614d2d565b60405180910390fd5b6000600d6000858152602001908152602001600020905061119f813385856131af565b50505050565b60006009905090565b600981815481106111be57600080fd5b9060005260206000200160009150905080546111d9906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611205906148ad565b80156112525780601f1061122757610100808354040283529160200191611252565b820191906000526020600020905b81548152906001019060200180831161123557829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112988333836132a5565b6112b78383836112a88787611d04565b6112b29190614979565b61234e565b505050565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061132b33858561131c3389611d04565b6113269190614979565b61234e565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161136893929190614d4d565b600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546113b4906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546113e0906148ad565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b5050505050905090565b6000600d60008681526020019081526020016000209050826114598533611d04565b101561146c576114698433611d04565b92505b6114778433856132a5565b611483818585856131af565b5050505050565b60008034116114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614df6565b60405180910390fd5b6001891015611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614e62565b60405180910390fd5b651cae8c13e00089111561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614ece565b60405180910390fd5b8760016002811061156f5761156e614ad0565b5b6020020135600f60006002811061158957611588614ad0565b5b01546115959190614aff565b886000600281106115a9576115a8614ad0565b5b6020020135600f6001600281106115c3576115c2614ad0565b5b01546115cf9190614aff565b1015611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614f3a565b60405180910390fd5b8760016002811061162457611623614ad0565b5b60200201358860006002811061163d5761163c614ad0565b5b60200201351115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614fa6565b60405180910390fd5b8660016002811061169757611696614ad0565b5b6020020135876000600281106116b0576116af614ad0565b5b602002013511156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90615012565b60405180910390fd5b606486111561173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061507e565b60405180910390fd5b600060088c8c60405161174e9291906150ce565b9081526020016040518091039020905060008160020180549050036117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90615133565b60405180910390fd5b600e60008154809291906117bb90615153565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c82600101918261182e929190615352565b503481600d0181905550898160060160010190600261184e929190613b16565b508881600601600301906002611865929190613b16565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a426118a99190614979565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118e9929190615473565b506118f43034613339565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161192c9190613d52565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d60205280600052604060002060009150905080600001549080600101805461198d906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546119b9906148ad565b8015611a065780601f106119db57610100808354040283529160200191611a06565b820191906000526020600020905b8154815290600101906020018083116119e957829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611a93576020028201915b815481526020019060010190808311611a7f575b5050505050815260200160038201600280602002604051908101604052809291908260028015611ad8576020028201915b815481526020019060010190808311611ac4575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611b5b906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611b87906148ad565b8015611bd45780601f10611ba957610100808354040283529160200191611bd4565b820191906000526020600020905b815481529060010190602001808311611bb757829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290614d2d565b60405180910390fd5b6060600060088484604051611c319291906150ce565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611cf75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611c65565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906155b5565b60405180910390fd5b600a6000815480929190611de490615153565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611e26929190615352565b50600060088585604051611e3b9291906150ce565b908152602001604051809103902090506000816002018054905014611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90615647565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611eeb929190615352565b50600080600090505b88889050811015611f8a57888882818110611f1257611f11614ad0565b5b9050604002016000013582611f279190614979565b915082600201898983818110611f4057611f3f614ad0565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f7b91906157f4565b50508080600101915050611ef4565b50620f42408114611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790615874565b60405180910390fd5b60005b8484905081101561204b5782600301858583818110611ff557611ff4614ad0565b5b905060200281019061200791906158a3565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161203c9190615a0a565b50508080600101915050611fd3565b5060008060005b846003018054905081101561216f57600085600301828154811061207957612078614ad0565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc08112156120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790615a8a565b60405180910390fd5b620f4240811315612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90615b1c565b60405180910390fd5b600081131561215257808461214b9190615b3c565b9350612161565b808361215e9190615b3c565b92505b508080600101915050612052565b50620f42408213156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90615bf2565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090615c84565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af249727888860405161224a929190615cd1565b60405180910390a150505050505050505050565b600881805160208101820180518482526020830160208501208183528095505050505050600091509050806000018054612297906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546122c3906148ad565b80156123105780601f106122e557610100808354040283529160200191612310565b820191906000526020600020905b8154815290600101906020018083116122f357829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b61235b83838360016133bb565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b25780600260008282546123a69190614979565b92505081905550612485565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561243e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161243593929190614d4d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ce578060026000828254039250508190555061251b565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125789190613d52565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f75760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125ee9190613eb2565b60405180910390fd5b61260382600083612360565b5050565b6000600c54821061261a578390506131a7565b600060088660405161262c9190615d26565b90815260200160405180910390209050600081600201805490500361265457849150506131a7565b60005b816003018054905081101561278857600082600301828154811061267e5761267d614ad0565b5b906000526020600020906002020160000154121561277b5761276d878360030183815481106126b0576126af614ad0565b5b9060005260206000209060020201604051806040016040529081600082015481526020016001820180546126e3906148ad565b80601f016020809104026020016040519081016040528092919081815260200182805461270f906148ad565b801561275c5780601f106127315761010080835404028352916020019161275c565b820191906000526020600020905b81548152906001019060200180831161273f57829003601f168201915b505050505081525050888888613592565b866127789190615d3d565b95505b8080600101915050612657565b5060005b81600301805490508110156128bd5760008260030182815481106127b3576127b2614ad0565b5b90600052602060002090600202016000015413156128b0576128a2878360030183815481106127e5576127e4614ad0565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612818906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612844906148ad565b80156128915780601f1061286657610100808354040283529160200191612891565b820191906000526020600020905b81548152906001019060200180831161287457829003601f168201915b505050505081525050888888613592565b866128ad9190615d3d565b95505b808060010191505061278c565b506000851315612ba957612b88816040518060a00160405290816000820180546128e6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612912906148ad565b801561295f5780601f106129345761010080835404028352916020019161295f565b820191906000526020600020905b81548152906001019060200180831161294257829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612a755783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050815260200190600101906129e3565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612b70578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612adf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0b906148ad565b8015612b585780601f10612b2d57610100808354040283529160200191612b58565b820191906000526020600020905b815481529060010190602001808311612b3b57829003601f168201915b50505050508152505081526020019060010190612aa2565b5050505081526020016004820154815250508661375d565b5084816004016000828254612b9d9190614979565b925050819055506131a5565b6000858260040154612bbb9190615b3c565b12612eac57612e81816040518060a0016040529081600082018054612bdf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612c0b906148ad565b8015612c585780601f10612c2d57610100808354040283529160200191612c58565b820191906000526020600020905b815481529060010190602001808311612c3b57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612d6e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612cdc565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612e69578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612e04906148ad565b8015612e515780601f10612e2657610100808354040283529160200191612e51565b820191906000526020600020905b815481529060010190602001808311612e3457829003601f168201915b50505050508152505081526020019060010190612d9b565b5050505081526020016004820154815250508661375d565b915084612e8d90615d80565b816004016000828254612ea09190614cad565b925050819055506131a4565b848160040154612ebc9190615b3c565b915061318c816040518060a0016040529081600082018054612edd906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612f09906148ad565b8015612f565780601f10612f2b57610100808354040283529160200191612f56565b820191906000526020600020905b815481529060010190602001808311612f3957829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561306c5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612fda565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131675783829060005260206000209060020201604051806040016040529081600082015481526020016001820180546130d6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054613102906148ad565b801561314f5780601f106131245761010080835404028352916020019161314f565b820191906000526020600020905b81548152906001019060200180831161313257829003601f168201915b50505050508152505081526020019060010190613099565b505050508152602001600482015481525050826004015461318790615d80565b61375d565b826131979190615b3c565b9150600081600401819055505b5b505b949350505050565b83600e01544211156131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90615e14565b60405180910390fd5b600084600501600081548092919061320d90615153565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006132b18484611d04565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146133335781811015613323578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161331a93929190614d4d565b60405180910390fd5b613332848484840360006133bb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133ab5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016133a29190613eb2565b60405180910390fd5b6133b760008383612360565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361342d5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016134249190613eb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361349f5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016134969190613eb2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561358c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516135839190613d52565b60405180910390a35b50505050565b6000620f42408560000151856135a89190615e34565b6135b29190615eac565b9050600085602001515103613614576000811215613605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fc90615f88565b60405180910390fd5b61360f3082612585565b613754565b6000600b876040516136269190615d26565b908152602001604051809103902086602001516040516136469190615d26565b908152602001604051809103902054905083156136b357600082121561368e578061367090615d80565b8213613685578061368090615d80565b613687565b815b91506136b2565b8061369890615d80565b82126136ad57806136a890615d80565b6136af565b815b91505b5b60006136ec87602001518487806136da57506000871480156136d9575060008a60000151125b5b6001886136e79190614979565b612607565b905080836136fa9190615d3d565b925082600b8960405161370d9190615d26565b9081526020016040518091039020886020015160405161372d9190615d26565b9081526020016040518091039020600082825461374a9190615b3c565b9250508190555050505b95945050505050565b60008060005b8460400151518110156138b75760008560400151828151811061378957613788614ad0565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138a95780600560006006600081548092919061380090615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508080600101915050613763565b5060005b846040015151811015613b0e576000856040015182815181106138e1576138e0614ad0565b5b60200260200101519050600060018760400151516138ff9190614cad565b83101561393957620f424082600001518761391a9190615e34565b6139249190615eac565b905080846139329190615b3c565b9350613948565b83866139459190615d3d565b90505b6000811315613a835761396030836020015183612360565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a7e57816020015160056000600660008154809291906139d190615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613aff565b80613a8d90615d80565b613a9a83602001516112c2565b1015613ae557613aad82602001516112c2565b81613ab89190615b3c565b85613ac39190615b3c565b9450613ae0826020015130613adb85602001516112c2565b612360565b613afe565b613afd82602001513083613af890615d80565b612360565b5b5b505080806001019150506138bb565b505092915050565b8260028101928215613b45579160200282015b82811115613b44578235825591602001919060010190613b29565b5b509050613b529190613b56565b5090565b5b80821115613b6f576000816000905550600101613b57565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bad578082015181840152602081019050613b92565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bd582613b73565b613bdf8185613b7e565b9350613bef818560208601613b8f565b613bf881613bb9565b840191505092915050565b60006020820190508181036000830152613c1d8184613bca565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6482613c39565b9050919050565b613c7481613c59565b8114613c7f57600080fd5b50565b600081359050613c9181613c6b565b92915050565b6000819050919050565b613caa81613c97565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b60008060408385031215613ce457613ce3613c2f565b5b6000613cf285828601613c82565b9250506020613d0385828601613cb8565b9150509250929050565b60008115159050919050565b613d2281613d0d565b82525050565b6000602082019050613d3d6000830184613d19565b92915050565b613d4c81613c97565b82525050565b6000602082019050613d676000830184613d43565b92915050565b600060208284031215613d8357613d82613c2f565b5b6000613d9184828501613cb8565b91505092915050565b600080600060608486031215613db357613db2613c2f565b5b6000613dc186828701613c82565b9350506020613dd286828701613c82565b9250506040613de386828701613cb8565b9150509250925092565b613df681613d0d565b8114613e0157600080fd5b50565b600081359050613e1381613ded565b92915050565b600080600060608486031215613e3257613e31613c2f565b5b6000613e4086828701613cb8565b9350506020613e5186828701613cb8565b9250506040613e6286828701613e04565b9150509250925092565b600060ff82169050919050565b613e8281613e6c565b82525050565b6000602082019050613e9d6000830184613e79565b92915050565b613eac81613c59565b82525050565b6000602082019050613ec76000830184613ea3565b92915050565b600060208284031215613ee357613ee2613c2f565b5b6000613ef184828501613c82565b91505092915050565b600080600060608486031215613f1357613f12613c2f565b5b6000613f2186828701613c82565b9350506020613f3286828701613cb8565b9250506040613f4386828701613cb8565b9150509250925092565b60008060008060808587031215613f6757613f66613c2f565b5b6000613f7587828801613cb8565b9450506020613f8687828801613c82565b9350506040613f9787828801613cb8565b9250506060613fa887828801613e04565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613fd957613fd8613fb4565b5b8235905067ffffffffffffffff811115613ff657613ff5613fb9565b5b60208301915083600182028301111561401257614011613fbe565b5b9250929050565b60008190508260206002028201111561403557614034613fbe565b5b92915050565b60008083601f84011261405157614050613fb4565b5b8235905067ffffffffffffffff81111561406e5761406d613fb9565b5b60208301915083600182028301111561408a57614089613fbe565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140b5576140b4613c2f565b5b60008b013567ffffffffffffffff8111156140d3576140d2613c34565b5b6140df8d828e01613fc3565b9a509a505060206140f28d828e01613cb8565b98505060406141038d828e01614019565b97505060806141148d828e01614019565b96505060c06141258d828e01613cb8565b95505060e06141368d828e01613e04565b9450506101006141488d828e01613e04565b9350506101208b013567ffffffffffffffff81111561416a57614169613c34565b5b6141768d828e0161403b565b92509250509295989b9194979a5092959850565b61419381613c97565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b60006141c5838361418a565b60208301905092915050565b6000602082019050919050565b6141e781614199565b6141f181846141a4565b92506141fc826141af565b8060005b8381101561422d57815161421487826141b9565b965061421f836141d1565b925050600181019050614200565b505050505050565b61423e81613d0d565b82525050565b60e08201600082015161425a600085018261418a565b50602082015161426d60208501826141de565b50604082015161428060608501826141de565b50606082015161429360a085018261418a565b5060808201516142a660c0850182614235565b50505050565b600081519050919050565b600082825260208201905092915050565b60006142d3826142ac565b6142dd81856142b7565b93506142ed818560208601613b8f565b6142f681613bb9565b840191505092915050565b600061024082019050614317600083018f613d43565b8181036020830152614329818e613bca565b9050614338604083018d613ea3565b614345606083018c613d43565b614352608083018b613d43565b61435f60a083018a614244565b61436d610180830189613d43565b61437b6101a0830188613d43565b6143896101c0830187613d19565b6143976101e0830186613d19565b6143a5610200830185613d19565b8181036102208301526143b881846142c8565b90509d9c50505050505050505050505050565b600080602083850312156143e2576143e1613c2f565b5b600083013567ffffffffffffffff811115614400576143ff613c34565b5b61440c85828601613fc3565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61444d81613c59565b82525050565b604082016000820151614469600085018261418a565b50602082015161447c6020850182614444565b50505050565b600061448e8383614453565b60408301905092915050565b6000602082019050919050565b60006144b282614418565b6144bc8185614423565b93506144c783614434565b8060005b838110156144f85781516144df8882614482565b97506144ea8361449a565b9250506001810190506144cb565b5085935050505092915050565b6000602082019050818103600083015261451f81846144a7565b905092915050565b6000806040838503121561453e5761453d613c2f565b5b600061454c85828601613c82565b925050602061455d85828601613c82565b9150509250929050565b60008083601f84011261457d5761457c613fb4565b5b8235905067ffffffffffffffff81111561459a57614599613fb9565b5b6020830191508360408202830111156145b6576145b5613fbe565b5b9250929050565b60008083601f8401126145d3576145d2613fb4565b5b8235905067ffffffffffffffff8111156145f0576145ef613fb9565b5b60208301915083602082028301111561460c5761460b613fbe565b5b9250929050565b600080600080600080606087890312156146305761462f613c2f565b5b600087013567ffffffffffffffff81111561464e5761464d613c34565b5b61465a89828a01614567565b9650965050602087013567ffffffffffffffff81111561467d5761467c613c34565b5b61468989828a01613fc3565b9450945050604087013567ffffffffffffffff8111156146ac576146ab613c34565b5b6146b889828a016145bd565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61470482613bb9565b810181811067ffffffffffffffff82111715614723576147226146cc565b5b80604052505050565b6000614736613c25565b905061474282826146fb565b919050565b600067ffffffffffffffff821115614762576147616146cc565b5b61476b82613bb9565b9050602081019050919050565b82818337600083830152505050565b600061479a61479584614747565b61472c565b9050828152602081018484840111156147b6576147b56146c7565b5b6147c1848285614778565b509392505050565b600082601f8301126147de576147dd613fb4565b5b81356147ee848260208601614787565b91505092915050565b60006020828403121561480d5761480c613c2f565b5b600082013567ffffffffffffffff81111561482b5761482a613c34565b5b614837848285016147c9565b91505092915050565b6000606082019050818103600083015261485a8186613bca565b90506148696020830185613ea3565b6148766040830184613d43565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148c557607f821691505b6020821081036148d8576148d761487e565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000614914601883613b7e565b915061491f826148de565b602082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061498482613c97565b915061498f83613c97565b92508282019050808211156149a7576149a661494a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149e782613c97565b91506149f283613c97565b925082614a0257614a016149ad565b5b828204905092915050565b6000614a1882613c97565b9150614a2383613c97565b925082614a3357614a326149ad565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602183613b7e565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b0a82613c97565b9150614b1583613c97565b9250828202614b2381613c97565b91508282048414831517614b3a57614b3961494a565b5b5092915050565b6000606082019050614b566000830186613d43565b614b636020830185613d19565b614b706040830184613d19565b949350505050565b60008190508160005260206000209050919050565b60008154614b9a816148ad565b614ba481866142b7565b94506001821660008114614bbf5760018114614bd557614c08565b60ff198316865281151560200286019350614c08565b614bde85614b78565b60005b83811015614c0057815481890152600182019150602081019050614be1565b808801955050505b50505092915050565b600060a082019050614c266000830188613d19565b614c336020830187613d19565b614c406040830186613d43565b614c4d6060830185613d43565b8181036080830152614c5f8184614b8d565b90509695505050505050565b600081519050614c7a81613ca1565b92915050565b600060208284031215614c9657614c95613c2f565b5b6000614ca484828501614c6b565b91505092915050565b6000614cb882613c97565b9150614cc383613c97565b9250828203905081811115614cdb57614cda61494a565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614d17601b83613b7e565b9150614d2282614ce1565b602082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b6000606082019050614d626000830186613ea3565b614d6f6020830185613d43565b614d7c6040830184613d43565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614de0602b83613b7e565b9150614deb82614d84565b604082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614e4c601583613b7e565b9150614e5782614e16565b602082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614eb8601483613b7e565b9150614ec382614e82565b602082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614f24601783613b7e565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614f90601a83613b7e565b9150614f9b82614f5a565b602082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614ffc601d83613b7e565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000615068601e83613b7e565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b600081905092915050565b60006150b5838561509e565b93506150c2838584614778565b82840190509392505050565b60006150db8284866150a9565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b600061511d601583613b7e565b9150615128826150e7565b602082019050919050565b6000602082019050818103600083015261514c81615110565b9050919050565b600061515e82613c97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151905761518f61494a565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026152087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826151cb565b61521286836151cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061524f61524a61524584613c97565b61522a565b613c97565b9050919050565b6000819050919050565b61526983615234565b61527d61527582615256565b8484546151d8565b825550505050565b600090565b615292615285565b61529d818484615260565b505050565b5b818110156152c1576152b660008261528a565b6001810190506152a3565b5050565b601f821115615306576152d7816151a6565b6152e0846151bb565b810160208510156152ef578190505b6153036152fb856151bb565b8301826152a2565b50505b505050565b600082821c905092915050565b60006153296000198460080261530b565b1980831691505092915050565b60006153428383615318565b9150826002028217905092915050565b61535c838361519b565b67ffffffffffffffff811115615375576153746146cc565b5b61537f82546148ad565b61538a8282856152c5565b6000601f8311600181146153b957600084156153a7578287013590505b6153b18582615336565b865550615419565b601f1984166153c7866151a6565b60005b828110156153ef578489013582556001820191506020850194506020810190506153ca565b8683101561540c5784890135615408601f891682615318565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f82111561546e5761543f81614b78565b615448846151bb565b81016020851015615457578190505b61546b615463856151bb565b8301826152a2565b50505b505050565b61547d8383615422565b67ffffffffffffffff811115615496576154956146cc565b5b6154a082546148ad565b6154ab82828561542d565b6000601f8311600181146154da57600084156154c8578287013590505b6154d28582615336565b86555061553a565b601f1984166154e886614b78565b60005b82811015615510578489013582556001820191506020850194506020810190506154eb565b8683101561552d5784890135615529601f891682615318565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b600061559f602583613b7e565b91506155aa82615543565b604082019050919050565b600060208201905081810360008301526155ce81615592565b9050919050565b7f4120706f73742077697468207468697320706f7374496420616c72656164792060008201527f6578697374730000000000000000000000000000000000000000000000000000602082015250565b6000615631602683613b7e565b915061563c826155d5565b604082019050919050565b6000602082019050818103600083015261566081615624565b9050919050565b6000813561567481613ca1565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6156b68461567d565b9350801983169250808416831791505092915050565b6156d582615234565b6156e86156e182615256565b835461568a565b8255505050565b600081356156fc81613c6b565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff6157258461567d565b9350801983169250808416831791505092915050565b600061575661575161574c84613c39565b61522a565b613c39565b9050919050565b60006157688261573b565b9050919050565b600061577a8261575d565b9050919050565b6000819050919050565b6157948261576f565b6157a76157a082615781565b8354615705565b8255505050565b6000810160008301806157c081615667565b90506157cc81846156cc565b5050506001810160208301806157e1816156ef565b90506157ed818461578b565b5050505050565b6157fe82826157ae565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061585e602283613b7e565b915061586982615802565b604082019050919050565b6000602082019050818103600083015261588d81615851565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126158bf576158be615894565b5b80830191505092915050565b6000819050919050565b6158de816158cb565b81146158e957600080fd5b50565b600081356158f9816158d5565b80915050919050565b600061591d615918615913846158cb565b61522a565b6158cb565b9050919050565b6000819050919050565b61593782615902565b61594a61594382615924565b835461568a565b8255505050565b6000808335600160200384360303811261596e5761596d615894565b5b80840192508235915067ffffffffffffffff8211156159905761598f615899565b5b6020830192506001820236038313156159ac576159ab61589e565b5b509250929050565b6159bf838383615352565b505050565b6000810160008301806159d6816158ec565b90506159e2818461592e565b50505060018101602083016159f78185615951565b615a028183866159b4565b505050505050565b615a1482826159c4565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b6000615a74602883613b7e565b9150615a7f82615a18565b604082019050919050565b60006020820190508181036000830152615aa381615a67565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615b06602783613b7e565b9150615b1182615aaa565b604082019050919050565b60006020820190508181036000830152615b3581615af9565b9050919050565b6000615b47826158cb565b9150615b52836158cb565b925082820190508281121560008312168382126000841215161715615b7a57615b7961494a565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615bdc602c83613b7e565b9150615be782615b80565b604082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615c6e602d83613b7e565b9150615c7982615c12565b604082019050919050565b60006020820190508181036000830152615c9d81615c61565b9050919050565b6000615cb08385613b7e565b9350615cbd838584614778565b615cc683613bb9565b840190509392505050565b60006020820190508181036000830152615cec818486615ca4565b90509392505050565b6000615d0082613b73565b615d0a818561509e565b9350615d1a818560208601613b8f565b80840191505092915050565b6000615d328284615cf5565b915081905092915050565b6000615d48826158cb565b9150615d53836158cb565b9250828203905081811260008412168282136000851215161715615d7a57615d7961494a565b5b92915050565b6000615d8b826158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008203615dbd57615dbc61494a565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615dfe601883613b7e565b9150615e0982615dc8565b602082019050919050565b60006020820190508181036000830152615e2d81615df1565b9050919050565b6000615e3f826158cb565b9150615e4a836158cb565b9250828202615e58816158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615e9057615e8f61494a565b5b8282058414831517615ea557615ea461494a565b5b5092915050565b6000615eb7826158cb565b9150615ec2836158cb565b925082615ed257615ed16149ad565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615f0b57615f0a61494a565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615f72602683613b7e565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b905091905056fea26469706673582212203c08d9e6e172243d912d1691dc4d17cbcdcea762850048f7e5be4758d5eab84f64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106101665760003560e01c8063642b5bfb116100d1578063a230c5241161008a578063da66863a11610064578063da66863a146105b0578063dd62ed3e146105ed578063e5b4d8271461062a578063f8300fca1461065357610166565b8063a230c524146104ee578063a23362791461052b578063a9059cbb1461057357610166565b8063642b5bfb146103c557806370a08231146103f0578063883802741461042d57806395d89b411461046a578063975762b3146104955780639fbe7c73146104be57610166565b806323b872dd1161012357806323b872dd146102915780632d17c062146102ce578063313ce567146102f757806350cde8ef146103225780635daf08ca1461035f5780635ffc70041461039c57610166565b806306fdde031461016b578063095ea7b31461019657806311aee380146101d357806317906c2e146101fe57806317c182171461022957806318160ddd14610266575b600080fd5b34801561017757600080fd5b50610180610692565b60405161018d9190613c03565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190613ccd565b610724565b6040516101ca9190613d28565b60405180910390f35b3480156101df57600080fd5b506101e8610747565b6040516101f59190613d52565b60405180910390f35b34801561020a57600080fd5b5061021361074d565b6040516102209190613d52565b60405180910390f35b34801561023557600080fd5b50610250600480360381019061024b9190613d6d565b610753565b60405161025d9190613d28565b60405180910390f35b34801561027257600080fd5b5061027b611135565b6040516102889190613d52565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b39190613d9a565b61113f565b6040516102c59190613d28565b60405180910390f35b3480156102da57600080fd5b506102f560048036038101906102f09190613e19565b61117c565b005b34801561030357600080fd5b5061030c6111a5565b6040516103199190613e88565b60405180910390f35b34801561032e57600080fd5b5061034960048036038101906103449190613d6d565b6111ae565b6040516103569190613c03565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613d6d565b61125a565b6040516103939190613eb2565b60405180910390f35b3480156103a857600080fd5b506103c360048036038101906103be9190613d9a565b61128d565b005b3480156103d157600080fd5b506103da6112bc565b6040516103e79190613d52565b60405180910390f35b3480156103fc57600080fd5b5061041760048036038101906104129190613ecd565b6112c2565b6040516104249190613d52565b60405180910390f35b34801561043957600080fd5b50610454600480360381019061044f9190613efa565b61130a565b6040516104619190613d28565b60405180910390f35b34801561047657600080fd5b5061047f6113a5565b60405161048c9190613c03565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613f4d565b611437565b005b6104d860048036038101906104d39190614091565b61148a565b6040516104e59190613d52565b60405180910390f35b3480156104fa57600080fd5b5061051560048036038101906105109190613ecd565b611944565b6040516105229190613d28565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613d6d565b611964565b60405161056a9c9b9a99989796959493929190614301565b60405180910390f35b34801561057f57600080fd5b5061059a60048036038101906105959190613ccd565b611bde565b6040516105a79190613d28565b60405180910390f35b3480156105bc57600080fd5b506105d760048036038101906105d291906143cb565b611c1b565b6040516105e49190614505565b60405180910390f35b3480156105f957600080fd5b50610614600480360381019061060f9190614527565b611d04565b6040516106219190613d52565b60405180910390f35b34801561063657600080fd5b50610651600480360381019061064c9190614613565b611d8b565b005b34801561065f57600080fd5b5061067a600480360381019061067591906147f7565b61225e565b60405161068993929190614840565b60405180910390f35b6060600380546106a1906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546106cd906148ad565b801561071a5780601f106106ef5761010080835404028352916020019161071a565b820191906000526020600020905b8154815290600101906020018083116106fd57829003601f168201915b5050505050905090565b60008061072f612346565b905061073c81858561234e565b600191505092915050565b60065481565b600a5481565b600080600d600084815260200190815260200160002090506000151581600f0160009054906101000a900460ff161515146107c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ba9061492a565b60405180910390fd5b600080600080600090505b846005015481101561083f5784600401600082815260200190815260200160002091508160010160009054906101000a900460ff161561081f578160020154846108189190614979565b9350610832565b81600201548361082f9190614979565b92505b80806001019150506107ce565b506002846003015461085191906149dc565b8361085c9190614979565b92506002846003015461086f91906149dc565b8261087a9190614979565b915060006002856003015461088f9190614a0d565b146108a4576001836108a19190614979565b92505b83600e01544211806108c757506108b9611135565b82846108c59190614979565b145b610906576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fd90614ab0565b60405180910390fd5b836006016001016000600281106109205761091f614ad0565b5b015461092a611135565b6109349190614aff565b82846109409190614979565b8560060160010160016002811061095a57610959614ad0565b5b01546109669190614aff565b11610a9657600184600f0160006101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de81866000806040516109bc93929190614b41565b60405180910390a183600f0160029054906101000a900460ff1615610a89578360020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d58660008686896010016040518663ffffffff1660e01b8152600401610a44959493929190614c11565b6020604051808303816000875af1158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190614c80565b505b6000945050505050611130565b83600601600301600060028110610ab057610aaf614ad0565b5b01548284610abe9190614979565b610ac89190614aff565b84600601600301600160028110610ae257610ae1614ad0565b5b015484610aef9190614aff565b10159450600184600f0160006101000a81548160ff0219169083151502179055508484600f0160016101000a81548160ff0219169083151502179055507fae8941f3b4d152118273444f36b8b5642e5602102b789968bd4b7cf8b250de8186866001604051610b6093929190614b41565b60405180910390a1600085610b755782610b77565b835b905060008060005b8760050154811015610c7f5787600401600082815260200190815260200160002094508460010160009054906101000a900460ff16151589151514610c72576000606489600601600501548760020154610bd99190614aff565b610be391906149dc565b90508860060160060160009054906101000a900460ff1615610c4157610c2e8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff163083612360565b8084610c3a9190614979565b9350610c70565b610c6f8660030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612585565b5b505b8080600101915050610b7f565b508715610e815760028760030154610c9791906149dc565b82610ca29190614979565b915060005b8760050154811015610d8d5787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610cff57508460010160009054906101000a900460ff161515891515145b15610d805760006064896006016005015486886002015487610d219190614aff565b610d2b91906149dc565b610d359190614aff565b610d3f91906149dc565b90508083610d4d9190614979565b9250610d7e308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610ca7565b5060008183610d9c9190614cad565b9050600060028960030154610db19190614a0d565b14610dc657600181610dc39190614979565b90505b610e7a886001018054610dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054610e04906148ad565b8015610e515780601f10610e2657610100808354040283529160200191610e51565b820191906000526020600020905b815481529060010190602001808311610e3457829003601f168201915b50505050508260028b60030154610e6891906149dc565b610e729190614979565b600080612607565b5050610f99565b866003015482610e919190614979565b915060005b8760050154811015610f975787600401600082815260200190815260200160002094508760060160060160009054906101000a900460ff168015610eee57508460010160009054906101000a900460ff161515891515145b15610f8a5760006064896006016005015460028b60030154610f1091906149dc565b87610f1b9190614cad565b886002015487610f2b9190614aff565b610f3591906149dc565b610f3f9190614aff565b610f4991906149dc565b90508083610f579190614979565b9250610f88308760030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612360565b505b8080600101915050610e96565b505b60005b6006548110156110625760006005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000610fe8611135565b610ff1836112c2565b8b600d01546110009190614aff565b61100a91906149dc565b90508173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611052573d6000803e3d6000fd5b5050508080600101915050610f9c565b5086600f0160029054906101000a900460ff1615611128578660020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b4e6a1d589600189898c6010016040518663ffffffff1660e01b81526004016110e3959493929190614c11565b6020604051808303816000875af1158015611102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111269190614c80565b505b505050505050505b919050565b6000600254905090565b60006040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117390614d2d565b60405180910390fd5b6000600d6000858152602001908152602001600020905061119f813385856131af565b50505050565b60006009905090565b600981815481106111be57600080fd5b9060005260206000200160009150905080546111d9906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611205906148ad565b80156112525780601f1061122757610100808354040283529160200191611252565b820191906000526020600020905b81548152906001019060200180831161123557829003601f168201915b505050505081565b60056020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112988333836132a5565b6112b78383836112a88787611d04565b6112b29190614979565b61234e565b505050565b600e5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061132b33858561131c3389611d04565b6113269190614979565b61234e565b8373ffffffffffffffffffffffffffffffffffffffff1663216ed6ad3385856040518463ffffffff1660e01b815260040161136893929190614d4d565b600060405180830381600087803b15801561138257600080fd5b505af1158015611396573d6000803e3d6000fd5b50505050600190509392505050565b6060600480546113b4906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546113e0906148ad565b801561142d5780601f106114025761010080835404028352916020019161142d565b820191906000526020600020905b81548152906001019060200180831161141057829003601f168201915b5050505050905090565b6000600d60008681526020019081526020016000209050826114598533611d04565b101561146c576114698433611d04565b92505b6114778433856132a5565b611483818585856131af565b5050505050565b60008034116114ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c590614df6565b60405180910390fd5b6001891015611512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150990614e62565b60405180910390fd5b651cae8c13e00089111561155b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155290614ece565b60405180910390fd5b8760016002811061156f5761156e614ad0565b5b6020020135600f60006002811061158957611588614ad0565b5b01546115959190614aff565b886000600281106115a9576115a8614ad0565b5b6020020135600f6001600281106115c3576115c2614ad0565b5b01546115cf9190614aff565b1015611610576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160790614f3a565b60405180910390fd5b8760016002811061162457611623614ad0565b5b60200201358860006002811061163d5761163c614ad0565b5b60200201351115611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90614fa6565b60405180910390fd5b8660016002811061169757611696614ad0565b5b6020020135876000600281106116b0576116af614ad0565b5b602002013511156116f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ed90615012565b60405180910390fd5b606486111561173a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117319061507e565b60405180910390fd5b600060088c8c60405161174e9291906150ce565b9081526020016040518091039020905060008160020180549050036117a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179f90615133565b60405180910390fd5b600e60008154809291906117bb90615153565b9190505591506000600d60008481526020019081526020016000209050338160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508c8c82600101918261182e929190615352565b503481600d0181905550898160060160010190600261184e929190613b16565b508881600601600301906002611865929190613b16565b50878160060160050181905550868160060160060160006101000a81548160ff0219169083151502179055508a81600601600001819055508a426118a99190614979565b81600e01819055508281600001819055508581600f0160026101000a81548160ff02191690831515021790555084848260100191826118e9929190615473565b506118f43034613339565b3481600301819055507f6e5c598b821d7fa8550e5fea58ab6e27c59e1cbe1df75a8591aa0c453b49e10a8360405161192c9190613d52565b60405180910390a150509a9950505050505050505050565b60076020528060005260406000206000915054906101000a900460ff1681565b600d60205280600052604060002060009150905080600001549080600101805461198d906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546119b9906148ad565b8015611a065780601f106119db57610100808354040283529160200191611a06565b820191906000526020600020905b8154815290600101906020018083116119e957829003601f168201915b5050505050908060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806005015490806006016040518060a00160405290816000820154815260200160018201600280602002604051908101604052809291908260028015611a93576020028201915b815481526020019060010190808311611a7f575b5050505050815260200160038201600280602002604051908101604052809291908260028015611ad8576020028201915b815481526020019060010190808311611ac4575b50505050508152602001600582015481526020016006820160009054906101000a900460ff1615151515815250509080600d01549080600e01549080600f0160009054906101000a900460ff169080600f0160019054906101000a900460ff169080600f0160029054906101000a900460ff1690806010018054611b5b906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054611b87906148ad565b8015611bd45780601f10611ba957610100808354040283529160200191611bd4565b820191906000526020600020905b815481529060010190602001808311611bb757829003601f168201915b505050505090508c565b60006040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290614d2d565b60405180910390fd5b6060600060088484604051611c319291906150ce565b9081526020016040518091039020905080600201805480602002602001604051908101604052809291908181526020016000905b82821015611cf75783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190611c65565b5050505091505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60008686905011611dd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc8906155b5565b60405180910390fd5b600a6000815480929190611de490615153565b91905055506009848490918060018154018082558091505060019003906000526020600020016000909192909192909192909192509182611e26929190615352565b50600060088585604051611e3b9291906150ce565b908152602001604051809103902090506000816002018054905014611e95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8c90615647565b60405180910390fd5b338160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508484826000019182611eeb929190615352565b50600080600090505b88889050811015611f8a57888882818110611f1257611f11614ad0565b5b9050604002016000013582611f279190614979565b915082600201898983818110611f4057611f3f614ad0565b5b90506040020190806001815401808255809150506001900390600052602060002090600202016000909190919091508181611f7b91906157f4565b50508080600101915050611ef4565b50620f42408114611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790615874565b60405180910390fd5b60005b8484905081101561204b5782600301858583818110611ff557611ff4614ad0565b5b905060200281019061200791906158a3565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161203c9190615a0a565b50508080600101915050611fd3565b5060008060005b846003018054905081101561216f57600085600301828154811061207957612078614ad0565b5b90600052602060002090600202016000015490507ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc08112156120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790615a8a565b60405180910390fd5b620f4240811315612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90615b1c565b60405180910390fd5b600081131561215257808461214b9190615b3c565b9350612161565b808361215e9190615b3c565b92505b508080600101915050612052565b50620f42408213156121b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ad90615bf2565b60405180910390fd5b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0bdc0811215612219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221090615c84565b60405180910390fd5b7fbd6277baf8ced6ab6543a1aef164635fc2bde1ba962d39d8a0fd81a5af249727888860405161224a929190615cd1565b60405180910390a150505050505050505050565b600881805160208101820180518482526020830160208501208183528095505050505050600091509050806000018054612297906148ad565b80601f01602080910402602001604051908101604052809291908181526020018280546122c3906148ad565b80156123105780601f106122e557610100808354040283529160200191612310565b820191906000526020600020905b8154815290600101906020018083116122f357829003601f168201915b5050505050908060010160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060040154905083565b600033905090565b61235b83838360016133bb565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123b25780600260008282546123a69190614979565b92505081905550612485565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561243e578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161243593929190614d4d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124ce578060026000828254039250508190555061251b565b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125789190613d52565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125f75760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125ee9190613eb2565b60405180910390fd5b61260382600083612360565b5050565b6000600c54821061261a578390506131a7565b600060088660405161262c9190615d26565b90815260200160405180910390209050600081600201805490500361265457849150506131a7565b60005b816003018054905081101561278857600082600301828154811061267e5761267d614ad0565b5b906000526020600020906002020160000154121561277b5761276d878360030183815481106126b0576126af614ad0565b5b9060005260206000209060020201604051806040016040529081600082015481526020016001820180546126e3906148ad565b80601f016020809104026020016040519081016040528092919081815260200182805461270f906148ad565b801561275c5780601f106127315761010080835404028352916020019161275c565b820191906000526020600020905b81548152906001019060200180831161273f57829003601f168201915b505050505081525050888888613592565b866127789190615d3d565b95505b8080600101915050612657565b5060005b81600301805490508110156128bd5760008260030182815481106127b3576127b2614ad0565b5b90600052602060002090600202016000015413156128b0576128a2878360030183815481106127e5576127e4614ad0565b5b906000526020600020906002020160405180604001604052908160008201548152602001600182018054612818906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612844906148ad565b80156128915780601f1061286657610100808354040283529160200191612891565b820191906000526020600020905b81548152906001019060200180831161287457829003601f168201915b505050505081525050888888613592565b866128ad9190615d3d565b95505b808060010191505061278c565b506000851315612ba957612b88816040518060a00160405290816000820180546128e6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612912906148ad565b801561295f5780601f106129345761010080835404028352916020019161295f565b820191906000526020600020905b81548152906001019060200180831161294257829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612a755783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525050815260200190600101906129e3565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612b70578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612adf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0b906148ad565b8015612b585780601f10612b2d57610100808354040283529160200191612b58565b820191906000526020600020905b815481529060010190602001808311612b3b57829003601f168201915b50505050508152505081526020019060010190612aa2565b5050505081526020016004820154815250508661375d565b5084816004016000828254612b9d9190614979565b925050819055506131a5565b6000858260040154612bbb9190615b3c565b12612eac57612e81816040518060a0016040529081600082018054612bdf906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612c0b906148ad565b8015612c585780601f10612c2d57610100808354040283529160200191612c58565b820191906000526020600020905b815481529060010190602001808311612c3b57829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b82821015612d6e5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612cdc565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015612e69578382906000526020600020906002020160405180604001604052908160008201548152602001600182018054612dd8906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612e04906148ad565b8015612e515780601f10612e2657610100808354040283529160200191612e51565b820191906000526020600020905b815481529060010190602001808311612e3457829003601f168201915b50505050508152505081526020019060010190612d9b565b5050505081526020016004820154815250508661375d565b915084612e8d90615d80565b816004016000828254612ea09190614cad565b925050819055506131a4565b848160040154612ebc9190615b3c565b915061318c816040518060a0016040529081600082018054612edd906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054612f09906148ad565b8015612f565780601f10612f2b57610100808354040283529160200191612f56565b820191906000526020600020905b815481529060010190602001808311612f3957829003601f168201915b505050505081526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160028201805480602002602001604051908101604052809291908181526020016000905b8282101561306c5783829060005260206000209060020201604051806040016040529081600082015481526020016001820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505081526020019060010190612fda565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156131675783829060005260206000209060020201604051806040016040529081600082015481526020016001820180546130d6906148ad565b80601f0160208091040260200160405190810160405280929190818152602001828054613102906148ad565b801561314f5780601f106131245761010080835404028352916020019161314f565b820191906000526020600020905b81548152906001019060200180831161313257829003601f168201915b50505050508152505081526020019060010190613099565b505050508152602001600482015481525050826004015461318790615d80565b61375d565b826131979190615b3c565b9150600081600401819055505b5b505b949350505050565b83600e01544211156131f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ed90615e14565b60405180910390fd5b600084600501600081548092919061320d90615153565b91905055905060008560040160008381526020019081526020016000209050848160030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550828160010160006101000a81548160ff021916908315150217905550838160020181905550818160000181905550505050505050565b60006132b18484611d04565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146133335781811015613323578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161331a93929190614d4d565b60405180910390fd5b613332848484840360006133bb565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036133ab5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016133a29190613eb2565b60405180910390fd5b6133b760008383612360565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361342d5760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016134249190613eb2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361349f5760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016134969190613eb2565b60405180910390fd5b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550801561358c578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516135839190613d52565b60405180910390a35b50505050565b6000620f42408560000151856135a89190615e34565b6135b29190615eac565b9050600085602001515103613614576000811215613605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135fc90615f88565b60405180910390fd5b61360f3082612585565b613754565b6000600b876040516136269190615d26565b908152602001604051809103902086602001516040516136469190615d26565b908152602001604051809103902054905083156136b357600082121561368e578061367090615d80565b8213613685578061368090615d80565b613687565b815b91506136b2565b8061369890615d80565b82126136ad57806136a890615d80565b6136af565b815b91505b5b60006136ec87602001518487806136da57506000871480156136d9575060008a60000151125b5b6001886136e79190614979565b612607565b905080836136fa9190615d3d565b925082600b8960405161370d9190615d26565b9081526020016040518091039020886020015160405161372d9190615d26565b9081526020016040518091039020600082825461374a9190615b3c565b9250508190555050505b95945050505050565b60008060005b8460400151518110156138b75760008560400151828151811061378957613788614ad0565b5b6020026020010151602001519050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166138a95780600560006006600081548092919061380090615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508080600101915050613763565b5060005b846040015151811015613b0e576000856040015182815181106138e1576138e0614ad0565b5b60200260200101519050600060018760400151516138ff9190614cad565b83101561393957620f424082600001518761391a9190615e34565b6139249190615eac565b905080846139329190615b3c565b9350613948565b83866139459190615d3d565b90505b6000811315613a835761396030836020015183612360565b60076000836020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16613a7e57816020015160056000600660008154809291906139d190615153565b91905055815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000846020015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b613aff565b80613a8d90615d80565b613a9a83602001516112c2565b1015613ae557613aad82602001516112c2565b81613ab89190615b3c565b85613ac39190615b3c565b9450613ae0826020015130613adb85602001516112c2565b612360565b613afe565b613afd82602001513083613af890615d80565b612360565b5b5b505080806001019150506138bb565b505092915050565b8260028101928215613b45579160200282015b82811115613b44578235825591602001919060010190613b29565b5b509050613b529190613b56565b5090565b5b80821115613b6f576000816000905550600101613b57565b5090565b600081519050919050565b600082825260208201905092915050565b60005b83811015613bad578082015181840152602081019050613b92565b60008484015250505050565b6000601f19601f8301169050919050565b6000613bd582613b73565b613bdf8185613b7e565b9350613bef818560208601613b8f565b613bf881613bb9565b840191505092915050565b60006020820190508181036000830152613c1d8184613bca565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613c6482613c39565b9050919050565b613c7481613c59565b8114613c7f57600080fd5b50565b600081359050613c9181613c6b565b92915050565b6000819050919050565b613caa81613c97565b8114613cb557600080fd5b50565b600081359050613cc781613ca1565b92915050565b60008060408385031215613ce457613ce3613c2f565b5b6000613cf285828601613c82565b9250506020613d0385828601613cb8565b9150509250929050565b60008115159050919050565b613d2281613d0d565b82525050565b6000602082019050613d3d6000830184613d19565b92915050565b613d4c81613c97565b82525050565b6000602082019050613d676000830184613d43565b92915050565b600060208284031215613d8357613d82613c2f565b5b6000613d9184828501613cb8565b91505092915050565b600080600060608486031215613db357613db2613c2f565b5b6000613dc186828701613c82565b9350506020613dd286828701613c82565b9250506040613de386828701613cb8565b9150509250925092565b613df681613d0d565b8114613e0157600080fd5b50565b600081359050613e1381613ded565b92915050565b600080600060608486031215613e3257613e31613c2f565b5b6000613e4086828701613cb8565b9350506020613e5186828701613cb8565b9250506040613e6286828701613e04565b9150509250925092565b600060ff82169050919050565b613e8281613e6c565b82525050565b6000602082019050613e9d6000830184613e79565b92915050565b613eac81613c59565b82525050565b6000602082019050613ec76000830184613ea3565b92915050565b600060208284031215613ee357613ee2613c2f565b5b6000613ef184828501613c82565b91505092915050565b600080600060608486031215613f1357613f12613c2f565b5b6000613f2186828701613c82565b9350506020613f3286828701613cb8565b9250506040613f4386828701613cb8565b9150509250925092565b60008060008060808587031215613f6757613f66613c2f565b5b6000613f7587828801613cb8565b9450506020613f8687828801613c82565b9350506040613f9787828801613cb8565b9250506060613fa887828801613e04565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f840112613fd957613fd8613fb4565b5b8235905067ffffffffffffffff811115613ff657613ff5613fb9565b5b60208301915083600182028301111561401257614011613fbe565b5b9250929050565b60008190508260206002028201111561403557614034613fbe565b5b92915050565b60008083601f84011261405157614050613fb4565b5b8235905067ffffffffffffffff81111561406e5761406d613fb9565b5b60208301915083600182028301111561408a57614089613fbe565b5b9250929050565b6000806000806000806000806000806101408b8d0312156140b5576140b4613c2f565b5b60008b013567ffffffffffffffff8111156140d3576140d2613c34565b5b6140df8d828e01613fc3565b9a509a505060206140f28d828e01613cb8565b98505060406141038d828e01614019565b97505060806141148d828e01614019565b96505060c06141258d828e01613cb8565b95505060e06141368d828e01613e04565b9450506101006141488d828e01613e04565b9350506101208b013567ffffffffffffffff81111561416a57614169613c34565b5b6141768d828e0161403b565b92509250509295989b9194979a5092959850565b61419381613c97565b82525050565b600060029050919050565b600081905092915050565b6000819050919050565b60006141c5838361418a565b60208301905092915050565b6000602082019050919050565b6141e781614199565b6141f181846141a4565b92506141fc826141af565b8060005b8381101561422d57815161421487826141b9565b965061421f836141d1565b925050600181019050614200565b505050505050565b61423e81613d0d565b82525050565b60e08201600082015161425a600085018261418a565b50602082015161426d60208501826141de565b50604082015161428060608501826141de565b50606082015161429360a085018261418a565b5060808201516142a660c0850182614235565b50505050565b600081519050919050565b600082825260208201905092915050565b60006142d3826142ac565b6142dd81856142b7565b93506142ed818560208601613b8f565b6142f681613bb9565b840191505092915050565b600061024082019050614317600083018f613d43565b8181036020830152614329818e613bca565b9050614338604083018d613ea3565b614345606083018c613d43565b614352608083018b613d43565b61435f60a083018a614244565b61436d610180830189613d43565b61437b6101a0830188613d43565b6143896101c0830187613d19565b6143976101e0830186613d19565b6143a5610200830185613d19565b8181036102208301526143b881846142c8565b90509d9c50505050505050505050505050565b600080602083850312156143e2576143e1613c2f565b5b600083013567ffffffffffffffff811115614400576143ff613c34565b5b61440c85828601613fc3565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61444d81613c59565b82525050565b604082016000820151614469600085018261418a565b50602082015161447c6020850182614444565b50505050565b600061448e8383614453565b60408301905092915050565b6000602082019050919050565b60006144b282614418565b6144bc8185614423565b93506144c783614434565b8060005b838110156144f85781516144df8882614482565b97506144ea8361449a565b9250506001810190506144cb565b5085935050505092915050565b6000602082019050818103600083015261451f81846144a7565b905092915050565b6000806040838503121561453e5761453d613c2f565b5b600061454c85828601613c82565b925050602061455d85828601613c82565b9150509250929050565b60008083601f84011261457d5761457c613fb4565b5b8235905067ffffffffffffffff81111561459a57614599613fb9565b5b6020830191508360408202830111156145b6576145b5613fbe565b5b9250929050565b60008083601f8401126145d3576145d2613fb4565b5b8235905067ffffffffffffffff8111156145f0576145ef613fb9565b5b60208301915083602082028301111561460c5761460b613fbe565b5b9250929050565b600080600080600080606087890312156146305761462f613c2f565b5b600087013567ffffffffffffffff81111561464e5761464d613c34565b5b61465a89828a01614567565b9650965050602087013567ffffffffffffffff81111561467d5761467c613c34565b5b61468989828a01613fc3565b9450945050604087013567ffffffffffffffff8111156146ac576146ab613c34565b5b6146b889828a016145bd565b92509250509295509295509295565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61470482613bb9565b810181811067ffffffffffffffff82111715614723576147226146cc565b5b80604052505050565b6000614736613c25565b905061474282826146fb565b919050565b600067ffffffffffffffff821115614762576147616146cc565b5b61476b82613bb9565b9050602081019050919050565b82818337600083830152505050565b600061479a61479584614747565b61472c565b9050828152602081018484840111156147b6576147b56146c7565b5b6147c1848285614778565b509392505050565b600082601f8301126147de576147dd613fb4565b5b81356147ee848260208601614787565b91505092915050565b60006020828403121561480d5761480c613c2f565b5b600082013567ffffffffffffffff81111561482b5761482a613c34565b5b614837848285016147c9565b91505092915050565b6000606082019050818103600083015261485a8186613bca565b90506148696020830185613ea3565b6148766040830184613d43565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148c557607f821691505b6020821081036148d8576148d761487e565b5b50919050565b7f506f6f6c20697320616c7265616479207265736f6c7665640000000000000000600082015250565b6000614914601883613b7e565b915061491f826148de565b602082019050919050565b6000602082019050818103600083015261494381614907565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061498482613c97565b915061498f83613c97565b92508282019050808211156149a7576149a661494a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149e782613c97565b91506149f283613c97565b925082614a0257614a016149ad565b5b828204905092915050565b6000614a1882613c97565b9150614a2383613c97565b925082614a3357614a326149ad565b5b828206905092915050565b7f506f6f6c20656e642074696d6520686173206e6f74207965742061727269766560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602183613b7e565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614b0a82613c97565b9150614b1583613c97565b9250828202614b2381613c97565b91508282048414831517614b3a57614b3961494a565b5b5092915050565b6000606082019050614b566000830186613d43565b614b636020830185613d19565b614b706040830184613d19565b949350505050565b60008190508160005260206000209050919050565b60008154614b9a816148ad565b614ba481866142b7565b94506001821660008114614bbf5760018114614bd557614c08565b60ff198316865281151560200286019350614c08565b614bde85614b78565b60005b83811015614c0057815481890152600182019150602081019050614be1565b808801955050505b50505092915050565b600060a082019050614c266000830188613d19565b614c336020830187613d19565b614c406040830186613d43565b614c4d6060830185613d43565b8181036080830152614c5f8184614b8d565b90509695505050505050565b600081519050614c7a81613ca1565b92915050565b600060208284031215614c9657614c95613c2f565b5b6000614ca484828501614c6b565b91505092915050565b6000614cb882613c97565b9150614cc383613c97565b9250828203905081811115614cdb57614cda61494a565b5b92915050565b7f524550207472616e73666572206973206e6f7420616c6c6f7765640000000000600082015250565b6000614d17601b83613b7e565b9150614d2282614ce1565b602082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b6000606082019050614d626000830186613ea3565b614d6f6020830185613d43565b614d7c6040830184613d43565b949350505050565b7f46656520697320726571756972656420746f20696e6974696174652076616c6960008201527f646174696f6e20706f6f6c000000000000000000000000000000000000000000602082015250565b6000614de0602b83613b7e565b9150614deb82614d84565b604082019050919050565b60006020820190508181036000830152614e0f81614dd3565b9050919050565b7f4475726174696f6e20697320746f6f2073686f72740000000000000000000000600082015250565b6000614e4c601583613b7e565b9150614e5782614e16565b602082019050919050565b60006020820190508181036000830152614e7b81614e3f565b9050919050565b7f4475726174696f6e20697320746f6f206c6f6e67000000000000000000000000600082015250565b6000614eb8601483613b7e565b9150614ec382614e82565b602082019050919050565b60006020820190508181036000830152614ee781614eab565b9050919050565b7f51756f72756d2069732062656c6f77206d696e696d756d000000000000000000600082015250565b6000614f24601783613b7e565b9150614f2f82614eee565b602082019050919050565b60006020820190508181036000830152614f5381614f17565b9050919050565b7f51756f72756d2069732067726561746572207468616e206f6e65000000000000600082015250565b6000614f90601a83613b7e565b9150614f9b82614f5a565b602082019050919050565b60006020820190508181036000830152614fbf81614f83565b9050919050565b7f57696e20726174696f2069732067726561746572207468616e206f6e65000000600082015250565b6000614ffc601d83613b7e565b915061500782614fc6565b602082019050919050565b6000602082019050818103600083015261502b81614fef565b9050919050565b7f42696e64696e672070657263656e74206d757374206265203c3d203130300000600082015250565b6000615068601e83613b7e565b915061507382615032565b602082019050919050565b600060208201905081810360008301526150978161505b565b9050919050565b600081905092915050565b60006150b5838561509e565b93506150c2838584614778565b82840190509392505050565b60006150db8284866150a9565b91508190509392505050565b7f54617267657420706f7374206e6f7420666f756e640000000000000000000000600082015250565b600061511d601583613b7e565b9150615128826150e7565b602082019050919050565b6000602082019050818103600083015261514c81615110565b9050919050565b600061515e82613c97565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036151905761518f61494a565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026152087fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826151cb565b61521286836151cb565b95508019841693508086168417925050509392505050565b6000819050919050565b600061524f61524a61524584613c97565b61522a565b613c97565b9050919050565b6000819050919050565b61526983615234565b61527d61527582615256565b8484546151d8565b825550505050565b600090565b615292615285565b61529d818484615260565b505050565b5b818110156152c1576152b660008261528a565b6001810190506152a3565b5050565b601f821115615306576152d7816151a6565b6152e0846151bb565b810160208510156152ef578190505b6153036152fb856151bb565b8301826152a2565b50505b505050565b600082821c905092915050565b60006153296000198460080261530b565b1980831691505092915050565b60006153428383615318565b9150826002028217905092915050565b61535c838361519b565b67ffffffffffffffff811115615375576153746146cc565b5b61537f82546148ad565b61538a8282856152c5565b6000601f8311600181146153b957600084156153a7578287013590505b6153b18582615336565b865550615419565b601f1984166153c7866151a6565b60005b828110156153ef578489013582556001820191506020850194506020810190506153ca565b8683101561540c5784890135615408601f891682615318565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f82111561546e5761543f81614b78565b615448846151bb565b81016020851015615457578190505b61546b615463856151bb565b8301826152a2565b50505b505050565b61547d8383615422565b67ffffffffffffffff811115615496576154956146cc565b5b6154a082546148ad565b6154ab82828561542d565b6000601f8311600181146154da57600084156154c8578287013590505b6154d28582615336565b86555061553a565b601f1984166154e886614b78565b60005b82811015615510578489013582556001820191506020850194506020810190506154eb565b8683101561552d5784890135615529601f891682615318565b8355505b6001600288020188555050505b50505050505050565b7f506f7374206d75737420696e636c756465206174206c65617374206f6e65206160008201527f7574686f72000000000000000000000000000000000000000000000000000000602082015250565b600061559f602583613b7e565b91506155aa82615543565b604082019050919050565b600060208201905081810360008301526155ce81615592565b9050919050565b7f4120706f73742077697468207468697320706f7374496420616c72656164792060008201527f6578697374730000000000000000000000000000000000000000000000000000602082015250565b6000615631602683613b7e565b915061563c826155d5565b604082019050919050565b6000602082019050818103600083015261566081615624565b9050919050565b6000813561567481613ca1565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6156b68461567d565b9350801983169250808416831791505092915050565b6156d582615234565b6156e86156e182615256565b835461568a565b8255505050565b600081356156fc81613c6b565b80915050919050565b600073ffffffffffffffffffffffffffffffffffffffff6157258461567d565b9350801983169250808416831791505092915050565b600061575661575161574c84613c39565b61522a565b613c39565b9050919050565b60006157688261573b565b9050919050565b600061577a8261575d565b9050919050565b6000819050919050565b6157948261576f565b6157a76157a082615781565b8354615705565b8255505050565b6000810160008301806157c081615667565b90506157cc81846156cc565b5050506001810160208301806157e1816156ef565b90506157ed818461578b565b5050505050565b6157fe82826157ae565b5050565b7f417574686f722077656967687473206d7573742073756d20746f20313030303060008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b600061585e602283613b7e565b915061586982615802565b604082019050919050565b6000602082019050818103600083015261588d81615851565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126158bf576158be615894565b5b80830191505092915050565b6000819050919050565b6158de816158cb565b81146158e957600080fd5b50565b600081356158f9816158d5565b80915050919050565b600061591d615918615913846158cb565b61522a565b6158cb565b9050919050565b6000819050919050565b61593782615902565b61594a61594382615924565b835461568a565b8255505050565b6000808335600160200384360303811261596e5761596d615894565b5b80840192508235915067ffffffffffffffff8211156159905761598f615899565b5b6020830192506001820236038313156159ac576159ab61589e565b5b509250929050565b6159bf838383615352565b505050565b6000810160008301806159d6816158ec565b90506159e2818461592e565b50505060018101602083016159f78185615951565b615a028183866159b4565b505050505050565b615a1482826159c4565b5050565b7f45616368206369746174696f6e20776569676874206d757374206265203e3d2060008201527f2d31303030303030000000000000000000000000000000000000000000000000602082015250565b6000615a74602883613b7e565b9150615a7f82615a18565b604082019050919050565b60006020820190508181036000830152615aa381615a67565b9050919050565b7f45616368206369746174696f6e20776569676874206d757374206265203c3d2060008201527f3130303030303000000000000000000000000000000000000000000000000000602082015250565b6000615b06602783613b7e565b9150615b1182615aaa565b604082019050919050565b60006020820190508181036000830152615b3581615af9565b9050919050565b6000615b47826158cb565b9150615b52836158cb565b925082820190508281121560008312168382126000841215161715615b7a57615b7961494a565b5b92915050565b7f53756d206f6620706f736974697665206369746174696f6e73206d757374206260008201527f65203c3d20313030303030300000000000000000000000000000000000000000602082015250565b6000615bdc602c83613b7e565b9150615be782615b80565b604082019050919050565b60006020820190508181036000830152615c0b81615bcf565b9050919050565b7f53756d206f66206e65676174697665206369746174696f6e73206d757374206260008201527f65203e3d202d3130303030303000000000000000000000000000000000000000602082015250565b6000615c6e602d83613b7e565b9150615c7982615c12565b604082019050919050565b60006020820190508181036000830152615c9d81615c61565b9050919050565b6000615cb08385613b7e565b9350615cbd838584614778565b615cc683613bb9565b840190509392505050565b60006020820190508181036000830152615cec818486615ca4565b90509392505050565b6000615d0082613b73565b615d0a818561509e565b9350615d1a818560208601613b8f565b80840191505092915050565b6000615d328284615cf5565b915081905092915050565b6000615d48826158cb565b9150615d53836158cb565b9250828203905081811260008412168282136000851215161715615d7a57615d7961494a565b5b92915050565b6000615d8b826158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008203615dbd57615dbc61494a565b5b816000039050919050565b7f506f6f6c20656e642074696d6520686173207061737365640000000000000000600082015250565b6000615dfe601883613b7e565b9150615e0982615dc8565b602082019050919050565b60006020820190508181036000830152615e2d81615df1565b9050919050565b6000615e3f826158cb565b9150615e4a836158cb565b9250828202615e58816158cb565b91507f80000000000000000000000000000000000000000000000000000000000000008414600084121615615e9057615e8f61494a565b5b8282058414831517615ea557615ea461494a565b5b5092915050565b6000615eb7826158cb565b9150615ec2836158cb565b925082615ed257615ed16149ad565b5b600160000383147f800000000000000000000000000000000000000000000000000000000000000083141615615f0b57615f0a61494a565b5b828205905092915050565b7f4c65616368696e672066726f6d20696e63696e657261746f7220697320666f7260008201527f62696464656e0000000000000000000000000000000000000000000000000000602082015250565b6000615f72602683613b7e565b9150615f7d82615f16565b604082019050919050565b60006020820190508181036000830152615fa181615f65565b905091905056fea26469706673582212203c08d9e6e172243d912d1691dc4d17cbcdcea762850048f7e5be4758d5eab84f64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/frontend/contractArtifacts/Onboarding.json b/frontend/contractArtifacts/Onboarding.json index 26d65b5..91013d6 100644 --- a/frontend/contractArtifacts/Onboarding.json +++ b/frontend/contractArtifacts/Onboarding.json @@ -288,7 +288,7 @@ }, { "internalType": "string", - "name": "contentId", + "name": "postId", "type": "string" }, { @@ -319,7 +319,7 @@ "inputs": [ { "internalType": "string", - "name": "requestContentId", + "name": "requestPostId", "type": "string" } ], @@ -349,7 +349,7 @@ "type": "uint256" }, { - "internalType": "enum WorkContract.WorkStatus", + "internalType": "enum Work.WorkStatus", "name": "status", "type": "uint8" }, @@ -360,12 +360,12 @@ }, { "internalType": "string", - "name": "requestContentId", + "name": "requestPostId", "type": "string" }, { "internalType": "string", - "name": "evidenceContentId", + "name": "evidencePostId", "type": "string" }, { @@ -451,7 +451,7 @@ }, { "internalType": "string", - "name": "evidenceContentId", + "name": "evidencePostId", "type": "string" }, { @@ -478,8 +478,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b50604051620035ac380380620035ac8339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b6080516133506200025c6000396000818161098101528181610a5101528181610b6e01528181610d8101528181610f9b015261102d01526133506000f3fe6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b610107600480360381019061010291906117ff565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b91906118e0565b61049e565b005b34801561013e57600080fd5b506101476105b1565b6040516101549190611942565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f91906119b3565b6105b7565b6040516101919190611942565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611a27565b610636565b6040516101d49796959493929190611b85565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611c2e565b6107c2565b005b610220600480360381019061021b9190611c90565b610c2e565b005b34801561022e57600080fd5b50610237610d77565b6040516102449190611942565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d04565b610d7d565b6040516102819190611942565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611d9e565b61112b565b005b3480156102bf57600080fd5b506102c86112a0565b6040516102d59190611942565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190611a27565b6112a6565b604051610313929190611dde565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611e5d565b6112ca565b005b34801561035157600080fd5b5061036c60048036038101906103679190611a27565b611503565b60405161037c9493929190611ef2565b60405180910390f35b34801561039157600080fd5b5061039a611560565b6040516103a79190611942565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611f83565b60405180910390fd5b60006007600081548092919061040a90611fd2565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611566565b81600301819055508383826004019182610497929190612260565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d89061237c565b60405180910390fd5b6000600560008154809291906104f690611fd2565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b919061239c565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a29190611942565b60405180910390a15050505050565b60075481565b60008083838101906105c99190611a27565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611dde565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90612083565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90612083565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90612083565b80601f016020809104026020016040519081016040528092919081815260200182805461075890612083565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec611a63565b5b8160020160009054906101000a900460ff16600381111561081157610810611a63565b5b14610851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489061241c565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561089457610893611a63565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff8111156108d2576108d1612025565b5b60405190808252806020026020018201604052801561090b57816020015b6108f8611760565b8152602001906001900390816108f05790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250816000815181106109745761097361243c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b81526004016109e2939291906127d9565b600060405180830381600087803b1580156109fc57600080fd5b505af1158015610a10573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610a45929190612825565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8660010154610a9c919061287d565b8660010154610aab91906128ae565b8660050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610af59190611942565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610b27989796959493929190612a0e565b60206040518083038185885af1158015610b45573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b6a9190612ab1565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610bf49493929190612ade565b600060405180830381600087803b158015610c0e57600080fd5b505af1158015610c22573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610c4390611fd2565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610cbd9190611942565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610ced96959493929190612b78565b60206040518083038185885af1158015610d0b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d309190612ab1565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610d679190611942565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490612c4d565b60405180910390fd5b60008383810190610e1e9190611a27565b90506000600660008381526020019081526020016000209050881580610e42575087155b15610ecd578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610e96919061287d565b9081150290604051600060405180830381858888f19350505050158015610ec1573d6000803e3d6000fd5b50600192505050611121565b60606000600167ffffffffffffffff811115610eec57610eeb612025565b5b604051908082528060200260200182016040528015610f2557816020015b610f12611760565b815260200190600190039081610f0a5790505b5090506040518060400160405280620f424081526020018460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610f8e57610f8d61243c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600401856040518463ffffffff1660e01b8152600401610ff993929190612d94565b600060405180830381600087803b15801561101357600080fd5b505af1158015611027573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8560010154611078919061287d565b856004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016110d49796959493929190612e06565b60206040518083038185885af11580156110f2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111179190612ab1565b5060009450505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90612f04565b60405180910390fd5b8060030160009054906101000a900460ff1615611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90612f96565b60405180910390fd5b806002015442111561124b57814261123e919061239c565b8160020181905550611264565b81816002015461125b919061239c565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516112939190611942565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156112f5576112f4611a63565b5b8160020160009054906101000a900460ff16600381111561131957611318611a63565b5b14611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613002565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613094565b60405180910390fd5b60018260020160006101000a81548160ff0219169083600381111561142e5761142d611a63565b5b02179055508585836005019182611446929190612260565b5060005b848490508110156114c2578260060185858381811061146c5761146b61243c565b5b905060200281019061147e91906130c3565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816114b3919061326f565b5050808060010191505061144a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516114f29190611942565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b60006115706115e5565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516115d7929190611dde565b60405180910390a150919050565b60008060005b60055481101561166c576004600082815260200190815260200160002060030160009054906101000a900460ff1661165f576004600082815260200190815260200160002060020154421161165f5760046000828152602001908152602001600020600101548261165c919061239c565b91505b80806001019150506115eb565b50600081116116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a7906132c9565b60405180910390fd5b600081446116be91906132e9565b9050600080600090505b600554811015611759576004600082815260200190815260200160002060030160009054906101000a900460ff1661174c576004600082815260200190815260200160002060020154421161174c57600460008281526020019081526020016000206001015482611739919061239c565b91508282111561174b57809450611759565b5b80806001019150506116c8565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126117bf576117be61179a565b5b8235905067ffffffffffffffff8111156117dc576117db61179f565b5b6020830191508360018202830111156117f8576117f76117a4565b5b9250929050565b6000806020838503121561181657611815611790565b5b600083013567ffffffffffffffff81111561183457611833611795565b5b611840858286016117a9565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118778261184c565b9050919050565b6118878161186c565b811461189257600080fd5b50565b6000813590506118a48161187e565b92915050565b6000819050919050565b6118bd816118aa565b81146118c857600080fd5b50565b6000813590506118da816118b4565b92915050565b6000806000606084860312156118f9576118f8611790565b5b600061190786828701611895565b9350506020611918868287016118cb565b9250506040611929868287016118cb565b9150509250925092565b61193c816118aa565b82525050565b60006020820190506119576000830184611933565b92915050565b60008083601f8401126119735761197261179a565b5b8235905067ffffffffffffffff8111156119905761198f61179f565b5b6020830191508360018202830111156119ac576119ab6117a4565b5b9250929050565b600080600080606085870312156119cd576119cc611790565b5b60006119db878288016118cb565b94505060206119ec878288016118cb565b935050604085013567ffffffffffffffff811115611a0d57611a0c611795565b5b611a198782880161195d565b925092505092959194509250565b600060208284031215611a3d57611a3c611790565b5b6000611a4b848285016118cb565b91505092915050565b611a5d8161186c565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611aa357611aa2611a63565b5b50565b6000819050611ab482611a92565b919050565b6000611ac482611aa6565b9050919050565b611ad481611ab9565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b14578082015181840152602081019050611af9565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b3c82611ada565b611b468185611ae5565b9350611b56818560208601611af6565b611b5f81611b20565b840191505092915050565b60008115159050919050565b611b7f81611b6a565b82525050565b600060e082019050611b9a600083018a611a54565b611ba76020830189611933565b611bb46040830188611acb565b611bc16060830187611933565b8181036080830152611bd38186611b31565b905081810360a0830152611be78185611b31565b9050611bf660c0830184611b76565b98975050505050505050565b611c0b81611b6a565b8114611c1657600080fd5b50565b600081359050611c2881611c02565b92915050565b60008060408385031215611c4557611c44611790565b5b6000611c53858286016118cb565b9250506020611c6485828601611c19565b9150509250929050565b600081905082602060030282011115611c8a57611c896117a4565b5b92915050565b60008060008060a08587031215611caa57611ca9611790565b5b6000611cb8878288016118cb565b945050602085013567ffffffffffffffff811115611cd957611cd8611795565b5b611ce5878288016117a9565b93509350506040611cf887828801611c6e565b91505092959194509250565b60008060008060008060a08789031215611d2157611d20611790565b5b6000611d2f89828a01611c19565b9650506020611d4089828a01611c19565b9550506040611d5189828a016118cb565b9450506060611d6289828a016118cb565b935050608087013567ffffffffffffffff811115611d8357611d82611795565b5b611d8f89828a0161195d565b92509250509295509295509295565b60008060408385031215611db557611db4611790565b5b6000611dc3858286016118cb565b9250506020611dd4858286016118cb565b9150509250929050565b6000604082019050611df36000830185611933565b611e006020830184611933565b9392505050565b60008083601f840112611e1d57611e1c61179a565b5b8235905067ffffffffffffffff811115611e3a57611e3961179f565b5b602083019150836020820283011115611e5657611e556117a4565b5b9250929050565b600080600080600060608688031215611e7957611e78611790565b5b6000611e87888289016118cb565b955050602086013567ffffffffffffffff811115611ea857611ea7611795565b5b611eb4888289016117a9565b9450945050604086013567ffffffffffffffff811115611ed757611ed6611795565b5b611ee388828901611e07565b92509250509295509295909350565b6000608082019050611f076000830187611a54565b611f146020830186611933565b611f216040830185611933565b611f2e6060830184611b76565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611f6d601083611ae5565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611fdd826118aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361200f5761200e611fa3565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061209b57607f821691505b6020821081036120ae576120ad612054565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120d9565b61212086836120d9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061215d612158612153846118aa565b612138565b6118aa565b9050919050565b6000819050919050565b61217783612142565b61218b61218382612164565b8484546120e6565b825550505050565b600090565b6121a0612193565b6121ab81848461216e565b505050565b5b818110156121cf576121c4600082612198565b6001810190506121b1565b5050565b601f821115612214576121e5816120b4565b6121ee846120c9565b810160208510156121fd578190505b612211612209856120c9565b8301826121b0565b50505b505050565b600082821c905092915050565b600061223760001984600802612219565b1980831691505092915050565b60006122508383612226565b9150826002028217905092915050565b61226a838361201a565b67ffffffffffffffff81111561228357612282612025565b5b61228d8254612083565b6122988282856121d3565b6000601f8311600181146122c757600084156122b5578287013590505b6122bf8582612244565b865550612327565b601f1984166122d5866120b4565b60005b828110156122fd578489013582556001820191506020850194506020810190506122d8565b8683101561231a5784890135612316601f891682612226565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000612366601183611ae5565b915061237182612330565b602082019050919050565b6000602082019050818103600083015261239581612359565b9050919050565b60006123a7826118aa565b91506123b2836118aa565b92508282019050808211156123ca576123c9611fa3565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612406602083611ae5565b9150612411826123d0565b602082019050919050565b60006020820190508181036000830152612435816123f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6124a0816118aa565b82525050565b6124af8161186c565b82525050565b6040820160008201516124cb6000850182612497565b5060208201516124de60208501826124a6565b50505050565b60006124f083836124b5565b60408301905092915050565b6000602082019050919050565b60006125148261246b565b61251e8185612476565b935061252983612487565b8060005b8381101561255a57815161254188826124e4565b975061254c836124fc565b92505060018101905061252d565b5085935050505092915050565b6000815461257481612083565b61257e8186611ae5565b9450600182166000811461259957600181146125af576125e2565b60ff1983168652811515602002860193506125e2565b6125b8856120b4565b60005b838110156125da578154818901526001820191506020810190506125bb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006126466126418361261c565b612629565b9050919050565b6000819050919050565b6126608161264d565b82525050565b600082825260208201905092915050565b6000815461268481612083565b61268e8186612666565b945060018216600081146126a957600181146126bf576126f2565b60ff1983168652811515602002860193506126f2565b6126c8856120b4565b60005b838110156126ea578154818901526001820191506020810190506126cb565b808801955050505b50505092915050565b600060408301600080840154905061271281612633565b61271f6000870182612657565b506001840185830360208701526127368382612677565b925050819250505092915050565b600061275083836126fb565b905092915050565b6000600282019050919050565b6000612770826125eb565b61277a81856125f6565b93508360208202850161278c85612607565b8060005b858110156127c7578484038952816127a88582612744565b94506127b383612758565b925060208a01995050600181019050612790565b50829750879550505050505092915050565b600060608201905081810360008301526127f38186612509565b905081810360208301526128078185612567565b9050818103604083015261281b8184612765565b9050949350505050565b600060408201905061283a6000830185611933565b6128476020830184611b76565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612888826118aa565b9150612893836118aa565b9250826128a3576128a261284e565b5b828204905092915050565b60006128b9826118aa565b91506128c4836118aa565b92508282039050818111156128dc576128db611fa3565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061290e8383612497565b60208301905092915050565b6000602082019050919050565b612930816128e2565b61293a81846128ed565b9250612945826128f8565b8060005b8381101561297657815161295d8782612902565b96506129688361291a565b925050600181019050612949565b505050505050565b6000819050919050565b60006129a361299e6129998461297e565b612138565b6118aa565b9050919050565b6129b381612988565b82525050565b600081519050919050565b600082825260208201905092915050565b60006129e0826129b9565b6129ea81856129c4565b93506129fa818560208601611af6565b612a0381611b20565b840191505092915050565b6000610140820190508181036000830152612a29818b612567565b9050612a38602083018a611933565b612a456040830189612927565b612a526080830188612927565b612a5f60c08301876129aa565b612a6c60e0830186611b76565b612a7a610100830185611b76565b818103610120830152612a8d81846129d5565b90509998505050505050505050565b600081519050612aab816118b4565b92915050565b600060208284031215612ac757612ac6611790565b5b6000612ad584828501612a9c565b91505092915050565b6000608082019050612af36000830187611933565b612b006020830186611a54565b612b0d6040830185611933565b612b1a6060830184611b76565b95945050505050565b82818337600083830152505050565b6000612b3e8385611ae5565b9350612b4b838584612b23565b612b5483611b20565b840190509392505050565b82818337505050565b612b7460608383612b5f565b5050565b600060e0820190508181036000830152612b9381888a612b32565b9050612ba26020830187611a54565b612baf6040830186612b68565b612bbc60a0830185611b76565b81810360c0830152612bce81846129d5565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612c37603183611ae5565b9150612c4282612bdb565b604082019050919050565b60006020820190508181036000830152612c6681612c2a565b9050919050565b600081519050919050565b6000819050602082019050919050565b6000612c9382611ada565b612c9d8185612666565b9350612cad818560208601611af6565b612cb681611b20565b840191505092915050565b6000604083016000830151612cd96000860182612657565b5060208301518482036020860152612cf18282612c88565b9150508091505092915050565b6000612d0a8383612cc1565b905092915050565b6000602082019050919050565b6000612d2a82612c6d565b612d3481856125f6565b935083602082028501612d4685612c78565b8060005b85811015612d825784840389528151612d638582612cfe565b9450612d6e83612d12565b925060208a01995050600181019050612d4a565b50829750879550505050505092915050565b60006060820190508181036000830152612dae8186612509565b90508181036020830152612dc28185612567565b90508181036040830152612dd68184612d1f565b9050949350505050565b50565b6000612df06000836129c4565b9150612dfb82612de0565b600082019050919050565b6000610140820190508181036000830152612e21818a612567565b9050612e306020830189611933565b612e3d6040830188612927565b612e4a6080830187612927565b612e5760c08301866129aa565b612e6460e0830185611b76565b612e72610100830184611b76565b818103610120830152612e8481612de3565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612eee603383611ae5565b9150612ef982612e92565b604082019050919050565b60006020820190508181036000830152612f1d81612ee1565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612f80602483611ae5565b9150612f8b82612f24565b604082019050919050565b60006020820190508181036000830152612faf81612f73565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612fec601883611ae5565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061307e603a83611ae5565b915061308982613022565b604082019050919050565b600060208201905081810360008301526130ad81613071565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126130df576130de6130b4565b5b80830191505092915050565b6130f48161264d565b81146130ff57600080fd5b50565b6000813561310f816130eb565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61315184613118565b9350801983169250808416831791505092915050565b600061318261317d6131788461264d565b612138565b61264d565b9050919050565b6000819050919050565b61319c82613167565b6131af6131a882613189565b8354613125565b8255505050565b600080833560016020038436030381126131d3576131d26130b4565b5b80840192508235915067ffffffffffffffff8211156131f5576131f46130b9565b5b602083019250600182023603831315613211576132106130be565b5b509250929050565b613224838383612260565b505050565b60008101600083018061323b81613102565b90506132478184613193565b505050600181016020830161325c81856131b6565b613267818386613219565b505050505050565b6132798282613229565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006132b3601a83611ae5565b91506132be8261327d565b602082019050919050565b600060208201905081810360008301526132e2816132a6565b9050919050565b60006132f4826118aa565b91506132ff836118aa565b92508261330f5761330e61284e565b5b82820690509291505056fea2646970667358221220b9d4fa7dd0ec5718d3ca0a76afa83887b6b03e1d169198a42ff584be00beab6764736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b610107600480360381019061010291906117ff565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b91906118e0565b61049e565b005b34801561013e57600080fd5b506101476105b1565b6040516101549190611942565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f91906119b3565b6105b7565b6040516101919190611942565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611a27565b610636565b6040516101d49796959493929190611b85565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611c2e565b6107c2565b005b610220600480360381019061021b9190611c90565b610c2e565b005b34801561022e57600080fd5b50610237610d77565b6040516102449190611942565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d04565b610d7d565b6040516102819190611942565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611d9e565b61112b565b005b3480156102bf57600080fd5b506102c86112a0565b6040516102d59190611942565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190611a27565b6112a6565b604051610313929190611dde565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611e5d565b6112ca565b005b34801561035157600080fd5b5061036c60048036038101906103679190611a27565b611503565b60405161037c9493929190611ef2565b60405180910390f35b34801561039157600080fd5b5061039a611560565b6040516103a79190611942565b60405180910390f35b6001543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90611f83565b60405180910390fd5b60006007600081548092919061040a90611fd2565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047c82611566565b81600301819055508383826004019182610497929190612260565b5050505050565b600082116104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d89061237c565b60405180910390fd5b6000600560008154809291906104f690611fd2565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261056b919061239c565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516105a29190611942565b60405180910390a15050505050565b60075481565b60008083838101906105c99190611a27565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f2082600154604051610620929190611dde565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461069e90612083565b80601f01602080910402602001604051908101604052809291908181526020018280546106ca90612083565b80156107175780601f106106ec57610100808354040283529160200191610717565b820191906000526020600020905b8154815290600101906020018083116106fa57829003601f168201915b50505050509080600501805461072c90612083565b80601f016020809104026020016040519081016040528092919081815260200182805461075890612083565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107ed576107ec611a63565b5b8160020160009054906101000a900460ff16600381111561081157610810611a63565b5b14610851576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108489061241c565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561089457610893611a63565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff8111156108d2576108d1612025565b5b60405190808252806020026020018201604052801561090b57816020015b6108f8611760565b8152602001906001900390816108f05790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250816000815181106109745761097361243c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b81526004016109e2939291906127d9565b600060405180830381600087803b1580156109fc57600080fd5b505af1158015610a10573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610a45929190612825565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8660010154610a9c919061287d565b8660010154610aab91906128ae565b8660050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610af59190611942565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610b27989796959493929190612a0e565b60206040518083038185885af1158015610b45573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610b6a9190612ab1565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610bf49493929190612ade565b600060405180830381600087803b158015610c0e57600080fd5b505af1158015610c22573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610c4390611fd2565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610cbd9190611942565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610ced96959493929190612b78565b60206040518083038185885af1158015610d0b573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d309190612ab1565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610d679190611942565b60405180910390a1505050505050565b60015481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490612c4d565b60405180910390fd5b60008383810190610e1e9190611a27565b90506000600660008381526020019081526020016000209050881580610e42575087155b15610ecd578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610e96919061287d565b9081150290604051600060405180830381858888f19350505050158015610ec1573d6000803e3d6000fd5b50600192505050611121565b60606000600167ffffffffffffffff811115610eec57610eeb612025565b5b604051908082528060200260200182016040528015610f2557816020015b610f12611760565b815260200190600190039081610f0a5790505b5090506040518060400160405280620f424081526020018460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610f8e57610f8d61243c565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600401856040518463ffffffff1660e01b8152600401610ff993929190612d94565b600060405180830381600087803b15801561101357600080fd5b505af1158015611027573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8560010154611078919061287d565b856004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b81526004016110d49796959493929190612e06565b60206040518083038185885af11580156110f2573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111179190612ab1565b5060009450505050505b9695505050505050565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146111d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111cb90612f04565b60405180910390fd5b8060030160009054906101000a900460ff1615611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90612f96565b60405180910390fd5b806002015442111561124b57814261123e919061239c565b8160020181905550611264565b81816002015461125b919061239c565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516112939190611942565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156112f5576112f4611a63565b5b8160020160009054906101000a900460ff16600381111561131957611318611a63565b5b14611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613002565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611406576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113fd90613094565b60405180910390fd5b60018260020160006101000a81548160ff0219169083600381111561142e5761142d611a63565b5b02179055508585836005019182611446929190612260565b5060005b848490508110156114c2578260060185858381811061146c5761146b61243c565b5b905060200281019061147e91906130c3565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816114b3919061326f565b5050808060010191505061144a565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516114f29190611942565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b60006115706115e5565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516115d7929190611dde565b60405180910390a150919050565b60008060005b60055481101561166c576004600082815260200190815260200160002060030160009054906101000a900460ff1661165f576004600082815260200190815260200160002060020154421161165f5760046000828152602001908152602001600020600101548261165c919061239c565b91505b80806001019150506115eb565b50600081116116b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a7906132c9565b60405180910390fd5b600081446116be91906132e9565b9050600080600090505b600554811015611759576004600082815260200190815260200160002060030160009054906101000a900460ff1661174c576004600082815260200190815260200160002060020154421161174c57600460008281526020019081526020016000206001015482611739919061239c565b91508282111561174b57809450611759565b5b80806001019150506116c8565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126117bf576117be61179a565b5b8235905067ffffffffffffffff8111156117dc576117db61179f565b5b6020830191508360018202830111156117f8576117f76117a4565b5b9250929050565b6000806020838503121561181657611815611790565b5b600083013567ffffffffffffffff81111561183457611833611795565b5b611840858286016117a9565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118778261184c565b9050919050565b6118878161186c565b811461189257600080fd5b50565b6000813590506118a48161187e565b92915050565b6000819050919050565b6118bd816118aa565b81146118c857600080fd5b50565b6000813590506118da816118b4565b92915050565b6000806000606084860312156118f9576118f8611790565b5b600061190786828701611895565b9350506020611918868287016118cb565b9250506040611929868287016118cb565b9150509250925092565b61193c816118aa565b82525050565b60006020820190506119576000830184611933565b92915050565b60008083601f8401126119735761197261179a565b5b8235905067ffffffffffffffff8111156119905761198f61179f565b5b6020830191508360018202830111156119ac576119ab6117a4565b5b9250929050565b600080600080606085870312156119cd576119cc611790565b5b60006119db878288016118cb565b94505060206119ec878288016118cb565b935050604085013567ffffffffffffffff811115611a0d57611a0c611795565b5b611a198782880161195d565b925092505092959194509250565b600060208284031215611a3d57611a3c611790565b5b6000611a4b848285016118cb565b91505092915050565b611a5d8161186c565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611aa357611aa2611a63565b5b50565b6000819050611ab482611a92565b919050565b6000611ac482611aa6565b9050919050565b611ad481611ab9565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b14578082015181840152602081019050611af9565b60008484015250505050565b6000601f19601f8301169050919050565b6000611b3c82611ada565b611b468185611ae5565b9350611b56818560208601611af6565b611b5f81611b20565b840191505092915050565b60008115159050919050565b611b7f81611b6a565b82525050565b600060e082019050611b9a600083018a611a54565b611ba76020830189611933565b611bb46040830188611acb565b611bc16060830187611933565b8181036080830152611bd38186611b31565b905081810360a0830152611be78185611b31565b9050611bf660c0830184611b76565b98975050505050505050565b611c0b81611b6a565b8114611c1657600080fd5b50565b600081359050611c2881611c02565b92915050565b60008060408385031215611c4557611c44611790565b5b6000611c53858286016118cb565b9250506020611c6485828601611c19565b9150509250929050565b600081905082602060030282011115611c8a57611c896117a4565b5b92915050565b60008060008060a08587031215611caa57611ca9611790565b5b6000611cb8878288016118cb565b945050602085013567ffffffffffffffff811115611cd957611cd8611795565b5b611ce5878288016117a9565b93509350506040611cf887828801611c6e565b91505092959194509250565b60008060008060008060a08789031215611d2157611d20611790565b5b6000611d2f89828a01611c19565b9650506020611d4089828a01611c19565b9550506040611d5189828a016118cb565b9450506060611d6289828a016118cb565b935050608087013567ffffffffffffffff811115611d8357611d82611795565b5b611d8f89828a0161195d565b92509250509295509295509295565b60008060408385031215611db557611db4611790565b5b6000611dc3858286016118cb565b9250506020611dd4858286016118cb565b9150509250929050565b6000604082019050611df36000830185611933565b611e006020830184611933565b9392505050565b60008083601f840112611e1d57611e1c61179a565b5b8235905067ffffffffffffffff811115611e3a57611e3961179f565b5b602083019150836020820283011115611e5657611e556117a4565b5b9250929050565b600080600080600060608688031215611e7957611e78611790565b5b6000611e87888289016118cb565b955050602086013567ffffffffffffffff811115611ea857611ea7611795565b5b611eb4888289016117a9565b9450945050604086013567ffffffffffffffff811115611ed757611ed6611795565b5b611ee388828901611e07565b92509250509295509295909350565b6000608082019050611f076000830187611a54565b611f146020830186611933565b611f216040830185611933565b611f2e6060830184611b76565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611f6d601083611ae5565b9150611f7882611f37565b602082019050919050565b60006020820190508181036000830152611f9c81611f60565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611fdd826118aa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361200f5761200e611fa3565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061209b57607f821691505b6020821081036120ae576120ad612054565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026121167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826120d9565b61212086836120d9565b95508019841693508086168417925050509392505050565b6000819050919050565b600061215d612158612153846118aa565b612138565b6118aa565b9050919050565b6000819050919050565b61217783612142565b61218b61218382612164565b8484546120e6565b825550505050565b600090565b6121a0612193565b6121ab81848461216e565b505050565b5b818110156121cf576121c4600082612198565b6001810190506121b1565b5050565b601f821115612214576121e5816120b4565b6121ee846120c9565b810160208510156121fd578190505b612211612209856120c9565b8301826121b0565b50505b505050565b600082821c905092915050565b600061223760001984600802612219565b1980831691505092915050565b60006122508383612226565b9150826002028217905092915050565b61226a838361201a565b67ffffffffffffffff81111561228357612282612025565b5b61228d8254612083565b6122988282856121d3565b6000601f8311600181146122c757600084156122b5578287013590505b6122bf8582612244565b865550612327565b601f1984166122d5866120b4565b60005b828110156122fd578489013582556001820191506020850194506020810190506122d8565b8683101561231a5784890135612316601f891682612226565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000612366601183611ae5565b915061237182612330565b602082019050919050565b6000602082019050818103600083015261239581612359565b9050919050565b60006123a7826118aa565b91506123b2836118aa565b92508282019050808211156123ca576123c9611fa3565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612406602083611ae5565b9150612411826123d0565b602082019050919050565b60006020820190508181036000830152612435816123f9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6124a0816118aa565b82525050565b6124af8161186c565b82525050565b6040820160008201516124cb6000850182612497565b5060208201516124de60208501826124a6565b50505050565b60006124f083836124b5565b60408301905092915050565b6000602082019050919050565b60006125148261246b565b61251e8185612476565b935061252983612487565b8060005b8381101561255a57815161254188826124e4565b975061254c836124fc565b92505060018101905061252d565b5085935050505092915050565b6000815461257481612083565b61257e8186611ae5565b9450600182166000811461259957600181146125af576125e2565b60ff1983168652811515602002860193506125e2565b6125b8856120b4565b60005b838110156125da578154818901526001820191506020810190506125bb565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006126466126418361261c565b612629565b9050919050565b6000819050919050565b6126608161264d565b82525050565b600082825260208201905092915050565b6000815461268481612083565b61268e8186612666565b945060018216600081146126a957600181146126bf576126f2565b60ff1983168652811515602002860193506126f2565b6126c8856120b4565b60005b838110156126ea578154818901526001820191506020810190506126cb565b808801955050505b50505092915050565b600060408301600080840154905061271281612633565b61271f6000870182612657565b506001840185830360208701526127368382612677565b925050819250505092915050565b600061275083836126fb565b905092915050565b6000600282019050919050565b6000612770826125eb565b61277a81856125f6565b93508360208202850161278c85612607565b8060005b858110156127c7578484038952816127a88582612744565b94506127b383612758565b925060208a01995050600181019050612790565b50829750879550505050505092915050565b600060608201905081810360008301526127f38186612509565b905081810360208301526128078185612567565b9050818103604083015261281b8184612765565b9050949350505050565b600060408201905061283a6000830185611933565b6128476020830184611b76565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612888826118aa565b9150612893836118aa565b9250826128a3576128a261284e565b5b828204905092915050565b60006128b9826118aa565b91506128c4836118aa565b92508282039050818111156128dc576128db611fa3565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061290e8383612497565b60208301905092915050565b6000602082019050919050565b612930816128e2565b61293a81846128ed565b9250612945826128f8565b8060005b8381101561297657815161295d8782612902565b96506129688361291a565b925050600181019050612949565b505050505050565b6000819050919050565b60006129a361299e6129998461297e565b612138565b6118aa565b9050919050565b6129b381612988565b82525050565b600081519050919050565b600082825260208201905092915050565b60006129e0826129b9565b6129ea81856129c4565b93506129fa818560208601611af6565b612a0381611b20565b840191505092915050565b6000610140820190508181036000830152612a29818b612567565b9050612a38602083018a611933565b612a456040830189612927565b612a526080830188612927565b612a5f60c08301876129aa565b612a6c60e0830186611b76565b612a7a610100830185611b76565b818103610120830152612a8d81846129d5565b90509998505050505050505050565b600081519050612aab816118b4565b92915050565b600060208284031215612ac757612ac6611790565b5b6000612ad584828501612a9c565b91505092915050565b6000608082019050612af36000830187611933565b612b006020830186611a54565b612b0d6040830185611933565b612b1a6060830184611b76565b95945050505050565b82818337600083830152505050565b6000612b3e8385611ae5565b9350612b4b838584612b23565b612b5483611b20565b840190509392505050565b82818337505050565b612b7460608383612b5f565b5050565b600060e0820190508181036000830152612b9381888a612b32565b9050612ba26020830187611a54565b612baf6040830186612b68565b612bbc60a0830185611b76565b81810360c0830152612bce81846129d5565b9050979650505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612c37603183611ae5565b9150612c4282612bdb565b604082019050919050565b60006020820190508181036000830152612c6681612c2a565b9050919050565b600081519050919050565b6000819050602082019050919050565b6000612c9382611ada565b612c9d8185612666565b9350612cad818560208601611af6565b612cb681611b20565b840191505092915050565b6000604083016000830151612cd96000860182612657565b5060208301518482036020860152612cf18282612c88565b9150508091505092915050565b6000612d0a8383612cc1565b905092915050565b6000602082019050919050565b6000612d2a82612c6d565b612d3481856125f6565b935083602082028501612d4685612c78565b8060005b85811015612d825784840389528151612d638582612cfe565b9450612d6e83612d12565b925060208a01995050600181019050612d4a565b50829750879550505050505092915050565b60006060820190508181036000830152612dae8186612509565b90508181036020830152612dc28185612567565b90508181036040830152612dd68184612d1f565b9050949350505050565b50565b6000612df06000836129c4565b9150612dfb82612de0565b600082019050919050565b6000610140820190508181036000830152612e21818a612567565b9050612e306020830189611933565b612e3d6040830188612927565b612e4a6080830187612927565b612e5760c08301866129aa565b612e6460e0830185611b76565b612e72610100830184611b76565b818103610120830152612e8481612de3565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612eee603383611ae5565b9150612ef982612e92565b604082019050919050565b60006020820190508181036000830152612f1d81612ee1565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612f80602483611ae5565b9150612f8b82612f24565b604082019050919050565b60006020820190508181036000830152612faf81612f73565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612fec601883611ae5565b9150612ff782612fb6565b602082019050919050565b6000602082019050818103600083015261301b81612fdf565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061307e603a83611ae5565b915061308982613022565b604082019050919050565b600060208201905081810360008301526130ad81613071565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126130df576130de6130b4565b5b80830191505092915050565b6130f48161264d565b81146130ff57600080fd5b50565b6000813561310f816130eb565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61315184613118565b9350801983169250808416831791505092915050565b600061318261317d6131788461264d565b612138565b61264d565b9050919050565b6000819050919050565b61319c82613167565b6131af6131a882613189565b8354613125565b8255505050565b600080833560016020038436030381126131d3576131d26130b4565b5b80840192508235915067ffffffffffffffff8211156131f5576131f46130b9565b5b602083019250600182023603831315613211576132106130be565b5b509250929050565b613224838383612260565b505050565b60008101600083018061323b81613102565b90506132478184613193565b505050600181016020830161325c81856131b6565b613267818386613219565b505050505050565b6132798282613229565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006132b3601a83611ae5565b91506132be8261327d565b602082019050919050565b600060208201905081810360008301526132e2816132a6565b9050919050565b60006132f4826118aa565b91506132ff836118aa565b92508261330f5761330e61284e565b5b82820690509291505056fea2646970667358221220b9d4fa7dd0ec5718d3ca0a76afa83887b6b03e1d169198a42ff584be00beab6764736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b50604051620036be380380620036be8339818101604052810190620000379190620001c4565b82828282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060038190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000220565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f882620000cb565b9050919050565b60006200010c82620000eb565b9050919050565b6200011e81620000ff565b81146200012a57600080fd5b50565b6000815190506200013e8162000113565b92915050565b60006200015182620000eb565b9050919050565b620001638162000144565b81146200016f57600080fd5b50565b600081519050620001838162000158565b92915050565b6000819050919050565b6200019e8162000189565b8114620001aa57600080fd5b50565b600081519050620001be8162000193565b92915050565b600080600060608486031215620001e057620001df620000c6565b5b6000620001f0868287016200012d565b9350506020620002038682870162000172565b92505060406200021686828701620001ad565b9150509250925092565b60805161345862000266600039600081816104dc01528181610a4901528181610b1901528181610c3601528181610e490152818161106301526110f501526134586000f3fe6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b61010760048036038101906101029190611883565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b9190611964565b6104da565b005b34801561013e57600080fd5b5061014761067a565b60405161015491906119c6565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f9190611a37565b610680565b60405161019191906119c6565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611aab565b6106ff565b6040516101d49796959493929190611c09565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611cb2565b61088b565b005b610220600480360381019061021b9190611d14565b610cf6565b005b34801561022e57600080fd5b50610237610e3f565b60405161024491906119c6565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d88565b610e45565b60405161028191906119c6565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611e22565b6111f3565b005b3480156102bf57600080fd5b506102c8611367565b6040516102d591906119c6565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190611aab565b61136d565b604051610313929190611e62565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611ee1565b611391565b005b34801561035157600080fd5b5061036c60048036038101906103679190611aab565b6115c9565b60405161037c9493929190611f76565b60405180910390f35b34801561039157600080fd5b5061039a611626565b6040516103a791906119c6565b60405180910390f35b6003543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90612007565b60405180910390fd5b60006007600081548092919061040a90612056565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047b61162c565b816003018190555083838260040191826104969291906122e4565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48282600301546040516104cc929190611e62565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f90612426565b60405180910390fd5b600082116105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a290612492565b60405180910390fd5b6000600160008154809291906105c090612056565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261063491906124b2565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161066b91906119c6565b60405180910390a15050505050565b60075481565b60008083838101906106929190611aab565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106e9929190611e62565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461076790612107565b80601f016020809104026020016040519081016040528092919081815260200182805461079390612107565b80156107e05780601f106107b5576101008083540402835291602001916107e0565b820191906000526020600020905b8154815290600101906020018083116107c357829003601f168201915b5050505050908060050180546107f590612107565b80601f016020809104026020016040519081016040528092919081815260200182805461082190612107565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156108b6576108b5611ae7565b5b8160020160009054906101000a900460ff1660038111156108da576108d9611ae7565b5b1461091a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091190612532565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561095c5761095b611ae7565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561099a576109996120a9565b5b6040519080825280602002602001820160405280156109d357816020015b6109c06117e4565b8152602001906001900390816109b85790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610a3c57610a3b612552565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610aaa939291906128ef565b600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610b0d92919061293b565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8660010154610b649190612993565b8660010154610b7391906129c4565b8660050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610bbd91906119c6565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610bef989796959493929190612b24565b60206040518083038185885af1158015610c0d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c329190612bc7565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610cbc9493929190612bf4565b600060405180830381600087803b158015610cd657600080fd5b505af1158015610cea573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610d0b90612056565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610d8691906119c6565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610db5959493929190612c8e565b60206040518083038185885af1158015610dd3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610df89190612bc7565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610e2f91906119c6565b60405180910390a1505050505050565b60035481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc90612d55565b60405180910390fd5b60008383810190610ee69190611aab565b90506000600660008381526020019081526020016000209050881580610f0a575087155b15610f95578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610f5e9190612993565b9081150290604051600060405180830381858888f19350505050158015610f89573d6000803e3d6000fd5b506001925050506111e9565b60606000600167ffffffffffffffff811115610fb457610fb36120a9565b5b604051908082528060200260200182016040528015610fed57816020015b610fda6117e4565b815260200190600190039081610fd25790505b5090506040518060400160405280620f424081526020018460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061105657611055612552565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600401856040518463ffffffff1660e01b81526004016110c193929190612e9c565b600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a85600101546111409190612993565b856004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b815260040161119c9796959493929190612f0e565b60206040518083038185885af11580156111ba573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111df9190612bc7565b5060009450505050505b9695505050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112929061300c565b60405180910390fd5b8060030160009054906101000a900460ff16156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e49061309e565b60405180910390fd5b806002015442111561131257814261130591906124b2565b816002018190555061132b565b81816002015461132291906124b2565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161135a91906119c6565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156113bc576113bb611ae7565b5b8160020160009054906101000a900460ff1660038111156113e0576113df611ae7565b5b14611420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114179061310a565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c39061319c565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156114f4576114f3611ae7565b5b0217905550858583600501918261150c9291906122e4565b5060005b84849050811015611588578260060185858381811061153257611531612552565b5b905060200281019061154491906131cb565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816115799190613377565b50508080600101915050611510565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516115b891906119c6565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b600061163661166f565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156116f35760008082815260200190815260200160002060030160009054906101000a900460ff166116e6576000808281526020019081526020016000206002015442116116e65760008082815260200190815260200160002060010154826116e391906124b2565b91505b8080600101915050611675565b5060008111611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e906133d1565b60405180910390fd5b6000814461174591906133f1565b9050600080600090505b6001548110156117dd5760008082815260200190815260200160002060030160009054906101000a900460ff166117d0576000808281526020019081526020016000206002015442116117d05760008082815260200190815260200160002060010154826117bd91906124b2565b9150828211156117cf578094506117dd565b5b808060010191505061174f565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126118435761184261181e565b5b8235905067ffffffffffffffff8111156118605761185f611823565b5b60208301915083600182028301111561187c5761187b611828565b5b9250929050565b6000806020838503121561189a57611899611814565b5b600083013567ffffffffffffffff8111156118b8576118b7611819565b5b6118c48582860161182d565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118fb826118d0565b9050919050565b61190b816118f0565b811461191657600080fd5b50565b60008135905061192881611902565b92915050565b6000819050919050565b6119418161192e565b811461194c57600080fd5b50565b60008135905061195e81611938565b92915050565b60008060006060848603121561197d5761197c611814565b5b600061198b86828701611919565b935050602061199c8682870161194f565b92505060406119ad8682870161194f565b9150509250925092565b6119c08161192e565b82525050565b60006020820190506119db60008301846119b7565b92915050565b60008083601f8401126119f7576119f661181e565b5b8235905067ffffffffffffffff811115611a1457611a13611823565b5b602083019150836001820283011115611a3057611a2f611828565b5b9250929050565b60008060008060608587031215611a5157611a50611814565b5b6000611a5f8782880161194f565b9450506020611a708782880161194f565b935050604085013567ffffffffffffffff811115611a9157611a90611819565b5b611a9d878288016119e1565b925092505092959194509250565b600060208284031215611ac157611ac0611814565b5b6000611acf8482850161194f565b91505092915050565b611ae1816118f0565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611b2757611b26611ae7565b5b50565b6000819050611b3882611b16565b919050565b6000611b4882611b2a565b9050919050565b611b5881611b3d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b98578082015181840152602081019050611b7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bc082611b5e565b611bca8185611b69565b9350611bda818560208601611b7a565b611be381611ba4565b840191505092915050565b60008115159050919050565b611c0381611bee565b82525050565b600060e082019050611c1e600083018a611ad8565b611c2b60208301896119b7565b611c386040830188611b4f565b611c4560608301876119b7565b8181036080830152611c578186611bb5565b905081810360a0830152611c6b8185611bb5565b9050611c7a60c0830184611bfa565b98975050505050505050565b611c8f81611bee565b8114611c9a57600080fd5b50565b600081359050611cac81611c86565b92915050565b60008060408385031215611cc957611cc8611814565b5b6000611cd78582860161194f565b9250506020611ce885828601611c9d565b9150509250929050565b600081905082602060030282011115611d0e57611d0d611828565b5b92915050565b60008060008060a08587031215611d2e57611d2d611814565b5b6000611d3c8782880161194f565b945050602085013567ffffffffffffffff811115611d5d57611d5c611819565b5b611d698782880161182d565b93509350506040611d7c87828801611cf2565b91505092959194509250565b60008060008060008060a08789031215611da557611da4611814565b5b6000611db389828a01611c9d565b9650506020611dc489828a01611c9d565b9550506040611dd589828a0161194f565b9450506060611de689828a0161194f565b935050608087013567ffffffffffffffff811115611e0757611e06611819565b5b611e1389828a016119e1565b92509250509295509295509295565b60008060408385031215611e3957611e38611814565b5b6000611e478582860161194f565b9250506020611e588582860161194f565b9150509250929050565b6000604082019050611e7760008301856119b7565b611e8460208301846119b7565b9392505050565b60008083601f840112611ea157611ea061181e565b5b8235905067ffffffffffffffff811115611ebe57611ebd611823565b5b602083019150836020820283011115611eda57611ed9611828565b5b9250929050565b600080600080600060608688031215611efd57611efc611814565b5b6000611f0b8882890161194f565b955050602086013567ffffffffffffffff811115611f2c57611f2b611819565b5b611f388882890161182d565b9450945050604086013567ffffffffffffffff811115611f5b57611f5a611819565b5b611f6788828901611e8b565b92509250509295509295909350565b6000608082019050611f8b6000830187611ad8565b611f9860208301866119b7565b611fa560408301856119b7565b611fb26060830184611bfa565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ff1601083611b69565b9150611ffc82611fbb565b602082019050919050565b6000602082019050818103600083015261202081611fe4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120618261192e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361209357612092612027565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061211f57607f821691505b602082108103612132576121316120d8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261219a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261215d565b6121a4868361215d565b95508019841693508086168417925050509392505050565b6000819050919050565b60006121e16121dc6121d78461192e565b6121bc565b61192e565b9050919050565b6000819050919050565b6121fb836121c6565b61220f612207826121e8565b84845461216a565b825550505050565b600090565b612224612217565b61222f8184846121f2565b505050565b5b818110156122535761224860008261221c565b600181019050612235565b5050565b601f8211156122985761226981612138565b6122728461214d565b81016020851015612281578190505b61229561228d8561214d565b830182612234565b50505b505050565b600082821c905092915050565b60006122bb6000198460080261229d565b1980831691505092915050565b60006122d483836122aa565b9150826002028217905092915050565b6122ee838361209e565b67ffffffffffffffff811115612307576123066120a9565b5b6123118254612107565b61231c828285612257565b6000601f83116001811461234b5760008415612339578287013590505b61234385826122c8565b8655506123ab565b601f19841661235986612138565b60005b828110156123815784890135825560018201915060208501945060208101905061235c565b8683101561239e578489013561239a601f8916826122aa565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000612410603683611b69565b915061241b826123b4565b604082019050919050565b6000602082019050818103600083015261243f81612403565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061247c601183611b69565b915061248782612446565b602082019050919050565b600060208201905081810360008301526124ab8161246f565b9050919050565b60006124bd8261192e565b91506124c88361192e565b92508282019050808211156124e0576124df612027565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061251c602083611b69565b9150612527826124e6565b602082019050919050565b6000602082019050818103600083015261254b8161250f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6125b68161192e565b82525050565b6125c5816118f0565b82525050565b6040820160008201516125e160008501826125ad565b5060208201516125f460208501826125bc565b50505050565b600061260683836125cb565b60408301905092915050565b6000602082019050919050565b600061262a82612581565b612634818561258c565b935061263f8361259d565b8060005b8381101561267057815161265788826125fa565b975061266283612612565b925050600181019050612643565b5085935050505092915050565b6000815461268a81612107565b6126948186611b69565b945060018216600081146126af57600181146126c5576126f8565b60ff1983168652811515602002860193506126f8565b6126ce85612138565b60005b838110156126f0578154818901526001820191506020810190506126d1565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061275c61275783612732565b61273f565b9050919050565b6000819050919050565b61277681612763565b82525050565b600082825260208201905092915050565b6000815461279a81612107565b6127a4818661277c565b945060018216600081146127bf57600181146127d557612808565b60ff198316865281151560200286019350612808565b6127de85612138565b60005b83811015612800578154818901526001820191506020810190506127e1565b808801955050505b50505092915050565b600060408301600080840154905061282881612749565b612835600087018261276d565b5060018401858303602087015261284c838261278d565b925050819250505092915050565b60006128668383612811565b905092915050565b6000600282019050919050565b600061288682612701565b612890818561270c565b9350836020820285016128a28561271d565b8060005b858110156128dd578484038952816128be858261285a565b94506128c98361286e565b925060208a019950506001810190506128a6565b50829750879550505050505092915050565b60006060820190508181036000830152612909818661261f565b9050818103602083015261291d818561267d565b90508181036040830152612931818461287b565b9050949350505050565b600060408201905061295060008301856119b7565b61295d6020830184611bfa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061299e8261192e565b91506129a98361192e565b9250826129b9576129b8612964565b5b828204905092915050565b60006129cf8261192e565b91506129da8361192e565b92508282039050818111156129f2576129f1612027565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612a2483836125ad565b60208301905092915050565b6000602082019050919050565b612a46816129f8565b612a508184612a03565b9250612a5b82612a0e565b8060005b83811015612a8c578151612a738782612a18565b9650612a7e83612a30565b925050600181019050612a5f565b505050505050565b6000819050919050565b6000612ab9612ab4612aaf84612a94565b6121bc565b61192e565b9050919050565b612ac981612a9e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612af682612acf565b612b008185612ada565b9350612b10818560208601611b7a565b612b1981611ba4565b840191505092915050565b6000610140820190508181036000830152612b3f818b61267d565b9050612b4e602083018a6119b7565b612b5b6040830189612a3d565b612b686080830188612a3d565b612b7560c0830187612ac0565b612b8260e0830186611bfa565b612b90610100830185611bfa565b818103610120830152612ba38184612aeb565b90509998505050505050505050565b600081519050612bc181611938565b92915050565b600060208284031215612bdd57612bdc611814565b5b6000612beb84828501612bb2565b91505092915050565b6000608082019050612c0960008301876119b7565b612c166020830186611ad8565b612c2360408301856119b7565b612c306060830184611bfa565b95945050505050565b82818337600083830152505050565b6000612c548385611b69565b9350612c61838584612c39565b612c6a83611ba4565b840190509392505050565b82818337505050565b612c8a60608383612c75565b5050565b600060c0820190508181036000830152612ca9818789612c48565b9050612cb86020830186612c7e565b612cc56080830185611bfa565b81810360a0830152612cd78184612aeb565b90509695505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612d3f603183611b69565b9150612d4a82612ce3565b604082019050919050565b60006020820190508181036000830152612d6e81612d32565b9050919050565b600081519050919050565b6000819050602082019050919050565b6000612d9b82611b5e565b612da5818561277c565b9350612db5818560208601611b7a565b612dbe81611ba4565b840191505092915050565b6000604083016000830151612de1600086018261276d565b5060208301518482036020860152612df98282612d90565b9150508091505092915050565b6000612e128383612dc9565b905092915050565b6000602082019050919050565b6000612e3282612d75565b612e3c818561270c565b935083602082028501612e4e85612d80565b8060005b85811015612e8a5784840389528151612e6b8582612e06565b9450612e7683612e1a565b925060208a01995050600181019050612e52565b50829750879550505050505092915050565b60006060820190508181036000830152612eb6818661261f565b90508181036020830152612eca818561267d565b90508181036040830152612ede8184612e27565b9050949350505050565b50565b6000612ef8600083612ada565b9150612f0382612ee8565b600082019050919050565b6000610140820190508181036000830152612f29818a61267d565b9050612f3860208301896119b7565b612f456040830188612a3d565b612f526080830187612a3d565b612f5f60c0830186612ac0565b612f6c60e0830185611bfa565b612f7a610100830184611bfa565b818103610120830152612f8c81612eeb565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612ff6603383611b69565b915061300182612f9a565b604082019050919050565b6000602082019050818103600083015261302581612fe9565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000613088602483611b69565b91506130938261302c565b604082019050919050565b600060208201905081810360008301526130b78161307b565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006130f4601883611b69565b91506130ff826130be565b602082019050919050565b60006020820190508181036000830152613123816130e7565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000613186603a83611b69565b91506131918261312a565b604082019050919050565b600060208201905081810360008301526131b581613179565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126131e7576131e66131bc565b5b80830191505092915050565b6131fc81612763565b811461320757600080fd5b50565b60008135613217816131f3565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61325984613220565b9350801983169250808416831791505092915050565b600061328a61328561328084612763565b6121bc565b612763565b9050919050565b6000819050919050565b6132a48261326f565b6132b76132b082613291565b835461322d565b8255505050565b600080833560016020038436030381126132db576132da6131bc565b5b80840192508235915067ffffffffffffffff8211156132fd576132fc6131c1565b5b602083019250600182023603831315613319576133186131c6565b5b509250929050565b61332c8383836122e4565b505050565b6000810160008301806133438161320a565b905061334f818461329b565b505050600181016020830161336481856132be565b61336f818386613321565b505050505050565b6133818282613331565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006133bb601a83611b69565b91506133c682613385565b602082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b60006133fc8261192e565b91506134078361192e565b92508261341757613416612964565b5b82820690509291505056fea26469706673582212209d81f311d7361b0a2b6d962ab9820c8f6d8913dd22ebea3bbae7d4df035bbed564736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100e85760003560e01c8063a035b1fe1161008a578063cf37625611610059578063cf376256146102de578063d0fae95f1461031c578063d5a44f8614610345578063d76b679414610385576100e8565b8063a035b1fe14610222578063b4e6a1d51461024d578063b5b20c001461028a578063c4a9e116146102b3576100e8565b8063815a0572116100c6578063815a05721461015d57806381d12c581461019a578063854b6a4f146101dd57806399ad6c5614610206576100e8565b80630d0271d6146100ed578063216ed6ad146101095780635badbe4c14610132575b600080fd5b61010760048036038101906101029190611883565b6103b0565b005b34801561011557600080fd5b50610130600480360381019061012b9190611964565b6104da565b005b34801561013e57600080fd5b5061014761067a565b60405161015491906119c6565b60405180910390f35b34801561016957600080fd5b50610184600480360381019061017f9190611a37565b610680565b60405161019191906119c6565b60405180910390f35b3480156101a657600080fd5b506101c160048036038101906101bc9190611aab565b6106ff565b6040516101d49796959493929190611c09565b60405180910390f35b3480156101e957600080fd5b5061020460048036038101906101ff9190611cb2565b61088b565b005b610220600480360381019061021b9190611d14565b610cf6565b005b34801561022e57600080fd5b50610237610e3f565b60405161024491906119c6565b60405180910390f35b34801561025957600080fd5b50610274600480360381019061026f9190611d88565b610e45565b60405161028191906119c6565b60405180910390f35b34801561029657600080fd5b506102b160048036038101906102ac9190611e22565b6111f3565b005b3480156102bf57600080fd5b506102c8611367565b6040516102d591906119c6565b60405180910390f35b3480156102ea57600080fd5b5061030560048036038101906103009190611aab565b61136d565b604051610313929190611e62565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190611ee1565b611391565b005b34801561035157600080fd5b5061036c60048036038101906103679190611aab565b6115c9565b60405161037c9493929190611f76565b60405180910390f35b34801561039157600080fd5b5061039a611626565b6040516103a791906119c6565b60405180910390f35b6003543410156103f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103ec90612007565b60405180910390fd5b60006007600081548092919061040a90612056565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061047b61162c565b816003018190555083838260040191826104969291906122e4565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b48282600301546040516104cc929190611e62565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610568576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055f90612426565b60405180910390fd5b600082116105ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a290612492565b60405180910390fd5b6000600160008154809291906105c090612056565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838160010181905550824261063491906124b2565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161066b91906119c6565b60405180910390a15050505050565b60075481565b60008083838101906106929190611aab565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106e9929190611e62565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461076790612107565b80601f016020809104026020016040519081016040528092919081815260200182805461079390612107565b80156107e05780601f106107b5576101008083540402835291602001916107e0565b820191906000526020600020905b8154815290600101906020018083116107c357829003601f168201915b5050505050908060050180546107f590612107565b80601f016020809104026020016040519081016040528092919081815260200182805461082190612107565b801561086e5780601f106108435761010080835404028352916020019161086e565b820191906000526020600020905b81548152906001019060200180831161085157829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156108b6576108b5611ae7565b5b8160020160009054906101000a900460ff1660038111156108da576108d9611ae7565b5b1461091a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091190612532565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561095c5761095b611ae7565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561099a576109996120a9565b5b6040519080825280602002602001820160405280156109d357816020015b6109c06117e4565b8152602001906001900390816109b85790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610a3c57610a3b612552565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610aaa939291906128ef565b600060405180830381600087803b158015610ac457600080fd5b505af1158015610ad8573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610b0d92919061293b565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a8660010154610b649190612993565b8660010154610b7391906129c4565b8660050160146040518060400160405280600181526020016003815250604051806040016040528060018152602001600281525060646001808f604051602001610bbd91906119c6565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401610bef989796959493929190612b24565b60206040518083038185885af1158015610c0d573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c329190612bc7565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610cbc9493929190612bf4565b600060405180830381600087803b158015610cd657600080fd5b505af1158015610cea573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610d0b90612056565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610d8691906119c6565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610db5959493929190612c8e565b60206040518083038185885af1158015610dd3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610df89190612bc7565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610e2f91906119c6565b60405180910390a1505050505050565b60035481565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ed5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecc90612d55565b60405180910390fd5b60008383810190610ee69190611aab565b90506000600660008381526020019081526020016000209050881580610f0a575087155b15610f95578060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a8360010154610f5e9190612993565b9081150290604051600060405180830381858888f19350505050158015610f89573d6000803e3d6000fd5b506001925050506111e9565b60606000600167ffffffffffffffff811115610fb457610fb36120a9565b5b604051908082528060200260200182016040528015610fed57816020015b610fda6117e4565b815260200190600190039081610fd25790505b5090506040518060400160405280620f424081526020018460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061105657611055612552565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600401856040518463ffffffff1660e01b81526004016110c193929190612e9c565b600060405180830381600087803b1580156110db57600080fd5b505af11580156110ef573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73600a85600101546111409190612993565b856004016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b815260040161119c9796959493929190612f0e565b60206040518083038185885af11580156111ba573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111df9190612bc7565b5060009450505050505b9695505050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461129b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112929061300c565b60405180910390fd5b8060030160009054906101000a900460ff16156112ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e49061309e565b60405180910390fd5b806002015442111561131257814261130591906124b2565b816002018190555061132b565b81816002015461132291906124b2565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98360405161135a91906119c6565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b6000600660008781526020019081526020016000209050600060038111156113bc576113bb611ae7565b5b8160020160009054906101000a900460ff1660038111156113e0576113df611ae7565b5b14611420576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114179061310a565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c39061319c565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156114f4576114f3611ae7565b5b0217905550858583600501918261150c9291906122e4565b5060005b84849050811015611588578260060185858381811061153257611531612552565b5b905060200281019061154491906131cb565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816115799190613377565b50508080600101915050611510565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516115b891906119c6565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b600061163661166f565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156116f35760008082815260200190815260200160002060030160009054906101000a900460ff166116e6576000808281526020019081526020016000206002015442116116e65760008082815260200190815260200160002060010154826116e391906124b2565b91505b8080600101915050611675565b5060008111611737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172e906133d1565b60405180910390fd5b6000814461174591906133f1565b9050600080600090505b6001548110156117dd5760008082815260200190815260200160002060030160009054906101000a900460ff166117d0576000808281526020019081526020016000206002015442116117d05760008082815260200190815260200160002060010154826117bd91906124b2565b9150828211156117cf578094506117dd565b5b808060010191505061174f565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f8401126118435761184261181e565b5b8235905067ffffffffffffffff8111156118605761185f611823565b5b60208301915083600182028301111561187c5761187b611828565b5b9250929050565b6000806020838503121561189a57611899611814565b5b600083013567ffffffffffffffff8111156118b8576118b7611819565b5b6118c48582860161182d565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006118fb826118d0565b9050919050565b61190b816118f0565b811461191657600080fd5b50565b60008135905061192881611902565b92915050565b6000819050919050565b6119418161192e565b811461194c57600080fd5b50565b60008135905061195e81611938565b92915050565b60008060006060848603121561197d5761197c611814565b5b600061198b86828701611919565b935050602061199c8682870161194f565b92505060406119ad8682870161194f565b9150509250925092565b6119c08161192e565b82525050565b60006020820190506119db60008301846119b7565b92915050565b60008083601f8401126119f7576119f661181e565b5b8235905067ffffffffffffffff811115611a1457611a13611823565b5b602083019150836001820283011115611a3057611a2f611828565b5b9250929050565b60008060008060608587031215611a5157611a50611814565b5b6000611a5f8782880161194f565b9450506020611a708782880161194f565b935050604085013567ffffffffffffffff811115611a9157611a90611819565b5b611a9d878288016119e1565b925092505092959194509250565b600060208284031215611ac157611ac0611814565b5b6000611acf8482850161194f565b91505092915050565b611ae1816118f0565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110611b2757611b26611ae7565b5b50565b6000819050611b3882611b16565b919050565b6000611b4882611b2a565b9050919050565b611b5881611b3d565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611b98578082015181840152602081019050611b7d565b60008484015250505050565b6000601f19601f8301169050919050565b6000611bc082611b5e565b611bca8185611b69565b9350611bda818560208601611b7a565b611be381611ba4565b840191505092915050565b60008115159050919050565b611c0381611bee565b82525050565b600060e082019050611c1e600083018a611ad8565b611c2b60208301896119b7565b611c386040830188611b4f565b611c4560608301876119b7565b8181036080830152611c578186611bb5565b905081810360a0830152611c6b8185611bb5565b9050611c7a60c0830184611bfa565b98975050505050505050565b611c8f81611bee565b8114611c9a57600080fd5b50565b600081359050611cac81611c86565b92915050565b60008060408385031215611cc957611cc8611814565b5b6000611cd78582860161194f565b9250506020611ce885828601611c9d565b9150509250929050565b600081905082602060030282011115611d0e57611d0d611828565b5b92915050565b60008060008060a08587031215611d2e57611d2d611814565b5b6000611d3c8782880161194f565b945050602085013567ffffffffffffffff811115611d5d57611d5c611819565b5b611d698782880161182d565b93509350506040611d7c87828801611cf2565b91505092959194509250565b60008060008060008060a08789031215611da557611da4611814565b5b6000611db389828a01611c9d565b9650506020611dc489828a01611c9d565b9550506040611dd589828a0161194f565b9450506060611de689828a0161194f565b935050608087013567ffffffffffffffff811115611e0757611e06611819565b5b611e1389828a016119e1565b92509250509295509295509295565b60008060408385031215611e3957611e38611814565b5b6000611e478582860161194f565b9250506020611e588582860161194f565b9150509250929050565b6000604082019050611e7760008301856119b7565b611e8460208301846119b7565b9392505050565b60008083601f840112611ea157611ea061181e565b5b8235905067ffffffffffffffff811115611ebe57611ebd611823565b5b602083019150836020820283011115611eda57611ed9611828565b5b9250929050565b600080600080600060608688031215611efd57611efc611814565b5b6000611f0b8882890161194f565b955050602086013567ffffffffffffffff811115611f2c57611f2b611819565b5b611f388882890161182d565b9450945050604086013567ffffffffffffffff811115611f5b57611f5a611819565b5b611f6788828901611e8b565b92509250509295509295909350565b6000608082019050611f8b6000830187611ad8565b611f9860208301866119b7565b611fa560408301856119b7565b611fb26060830184611bfa565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611ff1601083611b69565b9150611ffc82611fbb565b602082019050919050565b6000602082019050818103600083015261202081611fe4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006120618261192e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361209357612092612027565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061211f57607f821691505b602082108103612132576121316120d8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261219a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261215d565b6121a4868361215d565b95508019841693508086168417925050509392505050565b6000819050919050565b60006121e16121dc6121d78461192e565b6121bc565b61192e565b9050919050565b6000819050919050565b6121fb836121c6565b61220f612207826121e8565b84845461216a565b825550505050565b600090565b612224612217565b61222f8184846121f2565b505050565b5b818110156122535761224860008261221c565b600181019050612235565b5050565b601f8211156122985761226981612138565b6122728461214d565b81016020851015612281578190505b61229561228d8561214d565b830182612234565b50505b505050565b600082821c905092915050565b60006122bb6000198460080261229d565b1980831691505092915050565b60006122d483836122aa565b9150826002028217905092915050565b6122ee838361209e565b67ffffffffffffffff811115612307576123066120a9565b5b6123118254612107565b61231c828285612257565b6000601f83116001811461234b5760008415612339578287013590505b61234385826122c8565b8655506123ab565b601f19841661235986612138565b60005b828110156123815784890135825560018201915060208501945060208101905061235c565b8683101561239e578489013561239a601f8916826122aa565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000612410603683611b69565b915061241b826123b4565b604082019050919050565b6000602082019050818103600083015261243f81612403565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061247c601183611b69565b915061248782612446565b602082019050919050565b600060208201905081810360008301526124ab8161246f565b9050919050565b60006124bd8261192e565b91506124c88361192e565b92508282019050808211156124e0576124df612027565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061251c602083611b69565b9150612527826124e6565b602082019050919050565b6000602082019050818103600083015261254b8161250f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6125b68161192e565b82525050565b6125c5816118f0565b82525050565b6040820160008201516125e160008501826125ad565b5060208201516125f460208501826125bc565b50505050565b600061260683836125cb565b60408301905092915050565b6000602082019050919050565b600061262a82612581565b612634818561258c565b935061263f8361259d565b8060005b8381101561267057815161265788826125fa565b975061266283612612565b925050600181019050612643565b5085935050505092915050565b6000815461268a81612107565b6126948186611b69565b945060018216600081146126af57600181146126c5576126f8565b60ff1983168652811515602002860193506126f8565b6126ce85612138565b60005b838110156126f0578154818901526001820191506020810190506126d1565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061275c61275783612732565b61273f565b9050919050565b6000819050919050565b61277681612763565b82525050565b600082825260208201905092915050565b6000815461279a81612107565b6127a4818661277c565b945060018216600081146127bf57600181146127d557612808565b60ff198316865281151560200286019350612808565b6127de85612138565b60005b83811015612800578154818901526001820191506020810190506127e1565b808801955050505b50505092915050565b600060408301600080840154905061282881612749565b612835600087018261276d565b5060018401858303602087015261284c838261278d565b925050819250505092915050565b60006128668383612811565b905092915050565b6000600282019050919050565b600061288682612701565b612890818561270c565b9350836020820285016128a28561271d565b8060005b858110156128dd578484038952816128be858261285a565b94506128c98361286e565b925060208a019950506001810190506128a6565b50829750879550505050505092915050565b60006060820190508181036000830152612909818661261f565b9050818103602083015261291d818561267d565b90508181036040830152612931818461287b565b9050949350505050565b600060408201905061295060008301856119b7565b61295d6020830184611bfa565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061299e8261192e565b91506129a98361192e565b9250826129b9576129b8612964565b5b828204905092915050565b60006129cf8261192e565b91506129da8361192e565b92508282039050818111156129f2576129f1612027565b5b92915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612a2483836125ad565b60208301905092915050565b6000602082019050919050565b612a46816129f8565b612a508184612a03565b9250612a5b82612a0e565b8060005b83811015612a8c578151612a738782612a18565b9650612a7e83612a30565b925050600181019050612a5f565b505050505050565b6000819050919050565b6000612ab9612ab4612aaf84612a94565b6121bc565b61192e565b9050919050565b612ac981612a9e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000612af682612acf565b612b008185612ada565b9350612b10818560208601611b7a565b612b1981611ba4565b840191505092915050565b6000610140820190508181036000830152612b3f818b61267d565b9050612b4e602083018a6119b7565b612b5b6040830189612a3d565b612b686080830188612a3d565b612b7560c0830187612ac0565b612b8260e0830186611bfa565b612b90610100830185611bfa565b818103610120830152612ba38184612aeb565b90509998505050505050505050565b600081519050612bc181611938565b92915050565b600060208284031215612bdd57612bdc611814565b5b6000612beb84828501612bb2565b91505092915050565b6000608082019050612c0960008301876119b7565b612c166020830186611ad8565b612c2360408301856119b7565b612c306060830184611bfa565b95945050505050565b82818337600083830152505050565b6000612c548385611b69565b9350612c61838584612c39565b612c6a83611ba4565b840190509392505050565b82818337505050565b612c8a60608383612c75565b5050565b600060c0820190508181036000830152612ca9818789612c48565b9050612cb86020830186612c7e565b612cc56080830185611bfa565b81810360a0830152612cd78184612aeb565b90509695505050505050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612d3f603183611b69565b9150612d4a82612ce3565b604082019050919050565b60006020820190508181036000830152612d6e81612d32565b9050919050565b600081519050919050565b6000819050602082019050919050565b6000612d9b82611b5e565b612da5818561277c565b9350612db5818560208601611b7a565b612dbe81611ba4565b840191505092915050565b6000604083016000830151612de1600086018261276d565b5060208301518482036020860152612df98282612d90565b9150508091505092915050565b6000612e128383612dc9565b905092915050565b6000602082019050919050565b6000612e3282612d75565b612e3c818561270c565b935083602082028501612e4e85612d80565b8060005b85811015612e8a5784840389528151612e6b8582612e06565b9450612e7683612e1a565b925060208a01995050600181019050612e52565b50829750879550505050505092915050565b60006060820190508181036000830152612eb6818661261f565b90508181036020830152612eca818561267d565b90508181036040830152612ede8184612e27565b9050949350505050565b50565b6000612ef8600083612ada565b9150612f0382612ee8565b600082019050919050565b6000610140820190508181036000830152612f29818a61267d565b9050612f3860208301896119b7565b612f456040830188612a3d565b612f526080830187612a3d565b612f5f60c0830186612ac0565b612f6c60e0830185611bfa565b612f7a610100830184611bfa565b818103610120830152612f8c81612eeb565b905098975050505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612ff6603383611b69565b915061300182612f9a565b604082019050919050565b6000602082019050818103600083015261302581612fe9565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000613088602483611b69565b91506130938261302c565b604082019050919050565b600060208201905081810360008301526130b78161307b565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006130f4601883611b69565b91506130ff826130be565b602082019050919050565b60006020820190508181036000830152613123816130e7565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000613186603a83611b69565b91506131918261312a565b604082019050919050565b600060208201905081810360008301526131b581613179565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126131e7576131e66131bc565b5b80830191505092915050565b6131fc81612763565b811461320757600080fd5b50565b60008135613217816131f3565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61325984613220565b9350801983169250808416831791505092915050565b600061328a61328561328084612763565b6121bc565b612763565b9050919050565b6000819050919050565b6132a48261326f565b6132b76132b082613291565b835461322d565b8255505050565b600080833560016020038436030381126132db576132da6131bc565b5b80840192508235915067ffffffffffffffff8211156132fd576132fc6131c1565b5b602083019250600182023603831315613319576133186131c6565b5b509250929050565b61332c8383836122e4565b505050565b6000810160008301806133438161320a565b905061334f818461329b565b505050600181016020830161336481856132be565b61336f818386613321565b505050505050565b6133818282613331565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b60006133bb601a83611b69565b91506133c682613385565b602082019050919050565b600060208201905081810360008301526133ea816133ae565b9050919050565b60006133fc8261192e565b91506134078361192e565b92508261341757613416612964565b5b82820690509291505056fea26469706673582212209d81f311d7361b0a2b6d962ab9820c8f6d8913dd22ebea3bbae7d4df035bbed564736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/frontend/contractArtifacts/Proposals.json b/frontend/contractArtifacts/Proposals.json index 233537d..60a47b6 100644 --- a/frontend/contractArtifacts/Proposals.json +++ b/frontend/contractArtifacts/Proposals.json @@ -299,14 +299,9 @@ "inputs": [ { "internalType": "string", - "name": "contentId", + "name": "postId", "type": "string" }, - { - "internalType": "address", - "name": "author", - "type": "address" - }, { "internalType": "uint256[3]", "name": "durations", @@ -348,8 +343,8 @@ "type": "function" } ], - "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b50604051620039d1380380620039d18339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b608051613512620004bf6000396000818161046d01528181610a0301528181610bef01528181610de901528181611685015261185301526135126000f3fe60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611b65565b610229565b6040516100bc99989796959493929190611d59565b60405180910390f35b6100df60048036038101906100da9190611f29565b6103c1565b6040516100ec9190611fe5565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611b65565b6106c7565b60405161012991906121e5565b60405180910390f35b34801561013e57600080fd5b5061015960048036038101906101549190612201565b610a00565b005b34801561016757600080fd5b50610182600480360381019061017d9190612241565b610beb565b60405161018f9190611fe5565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611b65565b6114c0565b005b3480156101cd57600080fd5b506101d66115ec565b6040516101e39190611fe5565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611b65565b6115f2565b60405161022091906122db565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e90612325565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90612325565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e90612325565b80601f016020809104026020016040519081016040528092919081815260200182805461036a90612325565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b600060606000600167ffffffffffffffff8111156103e2576103e1612356565b5b60405190808252806020026020018201604052801561041b57816020015b610408611a56565b8152602001906001900390816104005790505b5090506040518060400160405280620f424081526020018973ffffffffffffffffffffffffffffffffffffffff16815250816000815181106104605761045f612385565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d827828c8c866040518563ffffffff1660e01b81526004016104ca949392919061263f565b600060405180830381600087803b1580156104e457600080fd5b505af11580156104f8573d6000803e3d6000fd5b505050506001600081548092919061050f906126bc565b91905055925060008060008581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8a8260030191826105819291906128bb565b504281600401819055508760006003811061059f5761059e612385565b5b6020020135816008016000600381106105bb576105ba612385565b5b6011020160000181905550876001600381106105da576105d9612385565b5b6020020135816008016001600381106105f6576105f5612385565b5b60110201600001819055508760026003811061061557610614612385565b5b60200201358160080160026003811061063157610630612385565b5b6011020160000181905550348160010181905550806001015481600201819055508681603b0160006101000a81548160ff021916908315150217905550858582603c0191826106819291906129f1565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e846040516106b19190611fe5565b60405180910390a1505050979650505050505050565b6106cf611a86565b60008060008481526020019081526020016000209050806008016000600381106106fc576106fb612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156107cc578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061071a565b50505050826000600381106107e4576107e3612385565b5b60200201819052508060080160016003811061080357610802612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156108d3578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610821565b50505050826001600381106108eb576108ea612385565b5b60200201819052508060080160026003811061090a57610909612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156109da578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610928565b50505050826002600381106109f2576109f1612385565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610a5a9190612ac1565b602060405180830381865afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b9190612af1565b1015610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390612b90565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610b479190612bb0565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610ba89190612be4565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610bde9190611fe5565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290612c8a565b60405180910390fd5b60008060008585810190610c8f9190612caa565b925092509250600080600085815260200190815260200160002090506000816008018460038110610cc357610cc2612385565b5b601102019050600081600101826010015460038110610ce557610ce4612385565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610de55760048360050160006101000a81548160ff02191690836005811115610d7f57610d7e611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610db39190612d49565b60405180910390a183836002016000828254610dcf9190612be4565b92505081905550600196505050505050506114b6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e769190612af1565b8b8d610e829190612be4565b6002610e8e9190612d77565b1015905060016005811115610ea657610ea5611c72565b5b8460050160009054906101000a900460ff166005811115610eca57610ec9611c72565b5b03610feb5760008614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990612e05565b60405180910390fd5b8d8015610f1c5750805b15610f535760028460050160006101000a81548160ff02191690836005811115610f4957610f48611c72565b5b0217905550610fe6565b6002836010015410610fc85760048460050160006101000a81548160ff02191690836005811115610f8757610f86611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610fbb9190612e71565b60405180910390a1610fe5565b6001836010016000828254610fdd9190612be4565b925050819055505b5b611392565b60026005811115610fff57610ffe611c72565b5b8460050160009054906101000a900460ff16600581111561102357611022611c72565b5b03611144576001861461106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290612eeb565b60405180910390fd5b8d80156110755750805b156110ac5760038460050160006101000a81548160ff021916908360058111156110a2576110a1611c72565b5b021790555061113f565b60028360100154106111215760048460050160006101000a81548160ff021916908360058111156110e0576110df611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516111149190612e71565b60405180910390a161113e565b60018360100160008282546111369190612be4565b925050819055505b5b611391565b6003600581111561115857611157611c72565b5b8460050160009054906101000a900460ff16600581111561117c5761117b611c72565b5b0361139057600286146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb90612f57565b60405180910390fd5b8d80156111ce5750805b156112fc5760058460050160006101000a81548160ff021916908360058111156111fb576111fa611c72565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b8760405161122f9190611fe5565b60405180910390a183603b0160009054906101000a900460ff16156112f7578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b81526004016112b293929190612ffb565b6020604051808303816000875af11580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f59190612af1565b505b61138f565b60028360100154106113715760048460050160006101000a81548160ff021916908360058111156113305761132f611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516113649190612e71565b60405180910390a161138e565b60018360100160008282546113869190612be4565b925050819055505b5b5b5b5b600160058111156113a6576113a5611c72565b5b8460050160009054906101000a900460ff1660058111156113ca576113c9611c72565b5b036113f0576113eb876000600a87600101546113e69190613068565b61181e565b6114aa565b6002600581111561140457611403611c72565b5b8460050160009054906101000a900460ff16600581111561142857611427611c72565b5b0361144e57611449876001600a87600101546114449190613068565b61181e565b6114a9565b6003600581111561146257611461611c72565b5b8460050160009054906101000a900460ff16600581111561148657611485611c72565b5b036114a8576114a7876002600a87600101546114a29190613068565b61181e565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156114ea576114e9611c72565b5b8160050160009054906101000a900460ff16600581111561150e5761150d611c72565b5b148061154e575060058081111561152857611527611c72565b5b8160050160009054906101000a900460ff16600581111561154c5761154b611c72565b5b145b61158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613131565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115e6573d6000803e3d6000fd5b50505050565b60015481565b60008060008084815260200190815260200160002090506000600581111561161d5761161c611c72565b5b8160050160009054906101000a900460ff16600581111561164157611640611c72565b5b14611681576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611678906131c3565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117129190612af1565b8260070154600a6117239190612d77565b1015905060006301e13380836004015461173d9190612be4565b42119050816117c85780156117bc5760048360050160006101000a81548160ff0219169083600581111561177457611773611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516117a89190613255565b60405180910390a160009350505050611819565b60009350505050611819565b60018360050160006101000a81548160ff021916908360058111156117f0576117ef611c72565b5b0217905550611811856000600a866001015461180c9190613068565b61181e565b600193505050505b919050565b60008060008581526020019081526020016000209050818160020160008282546118489190612bb0565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7384846003018560080188600381106118a8576118a7612385565b5b6011020160000154600689600381106118c4576118c3612385565b5b60020201600c8a600381106118dc576118db612385565b5b6002020160028b600381106118f4576118f3612385565b5b015460058c6003811061190a57611909612385565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161193793929190613283565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611969989796959493929190613425565b60206040518083038185885af1158015611987573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119ac9190612af1565b905060008260080185600381106119c6576119c5612385565b5b6011020190506000816001018260100154600381106119e8576119e7612385565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611a459291906134b3565b60405180910390a150505050505050565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806003905b611a9d611ab3565b815260200190600190039081611a955790505090565b60405180606001604052806003905b611aca611ae0565b815260200190600190039081611ac25790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b611b4281611b2f565b8114611b4d57600080fd5b50565b600081359050611b5f81611b39565b92915050565b600060208284031215611b7b57611b7a611b25565b5b6000611b8984828501611b50565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bbd82611b92565b9050919050565b611bcd81611bb2565b82525050565b611bdc81611b2f565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c1c578082015181840152602081019050611c01565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c4482611be2565b611c4e8185611bed565b9350611c5e818560208601611bfe565b611c6781611c28565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611cb257611cb1611c72565b5b50565b6000819050611cc382611ca1565b919050565b6000611cd382611cb5565b9050919050565b611ce381611cc8565b82525050565b60008115159050919050565b611cfe81611ce9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611d2b82611d04565b611d358185611d0f565b9350611d45818560208601611bfe565b611d4e81611c28565b840191505092915050565b600061012082019050611d6f600083018c611bc4565b611d7c602083018b611bd3565b611d89604083018a611bd3565b8181036060830152611d9b8189611c39565b9050611daa6080830188611bd3565b611db760a0830187611cda565b611dc460c0830186611bd3565b611dd160e0830185611cf5565b818103610100830152611de48184611d20565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611e1957611e18611df4565b5b8235905067ffffffffffffffff811115611e3657611e35611df9565b5b602083019150836001820283011115611e5257611e51611dfe565b5b9250929050565b611e6281611bb2565b8114611e6d57600080fd5b50565b600081359050611e7f81611e59565b92915050565b600081905082602060030282011115611ea157611ea0611dfe565b5b92915050565b611eb081611ce9565b8114611ebb57600080fd5b50565b600081359050611ecd81611ea7565b92915050565b60008083601f840112611ee957611ee8611df4565b5b8235905067ffffffffffffffff811115611f0657611f05611df9565b5b602083019150836001820283011115611f2257611f21611dfe565b5b9250929050565b600080600080600080600060e0888a031215611f4857611f47611b25565b5b600088013567ffffffffffffffff811115611f6657611f65611b2a565b5b611f728a828b01611e03565b97509750506020611f858a828b01611e70565b9550506040611f968a828b01611e85565b94505060a0611fa78a828b01611ebe565b93505060c088013567ffffffffffffffff811115611fc857611fc7611b2a565b5b611fd48a828b01611ed3565b925092505092959891949750929550565b6000602082019050611ffa6000830184611bd3565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b61204981611b2f565b82525050565b61205881611ce9565b82525050565b60e0820160008201516120746000850182612040565b506020820151612087602085018261204f565b50604082015161209a604085018261204f565b5060608201516120ad6060850182612040565b5060808201516120c06080850182612040565b5060a08201516120d360a085018261204f565b5060c08201516120e660c085018261204f565b50505050565b60006120f8838361205e565b60e08301905092915050565b6000602082019050919050565b61211a81612020565b612124818461202b565b925061212f82612036565b8060005b8381101561216057815161214787826120ec565b965061215283612104565b925050600181019050612133565b505050505050565b60006121748383612111565b6102a08301905092915050565b6000602082019050919050565b61219781612000565b6121a1818461200b565b92506121ac82612016565b8060005b838110156121dd5781516121c48782612168565b96506121cf83612181565b9250506001810190506121b0565b505050505050565b60006107e0820190506121fb600083018461218e565b92915050565b6000806040838503121561221857612217611b25565b5b600061222685828601611b50565b925050602061223785828601611b50565b9150509250929050565b60008060008060008060a0878903121561225e5761225d611b25565b5b600061226c89828a01611ebe565b965050602061227d89828a01611ebe565b955050604061228e89828a01611b50565b945050606061229f89828a01611b50565b935050608087013567ffffffffffffffff8111156122c0576122bf611b2a565b5b6122cc89828a01611ed3565b92509250509295509295509295565b60006020820190506122f06000830184611cf5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061233d57607f821691505b6020821081036123505761234f6122f6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6123e981611bb2565b82525050565b6040820160008201516124056000850182612040565b50602082015161241860208501826123e0565b50505050565b600061242a83836123ef565b60408301905092915050565b6000602082019050919050565b600061244e826123b4565b61245881856123bf565b9350612463836123d0565b8060005b8381101561249457815161247b888261241e565b975061248683612436565b925050600181019050612467565b5085935050505092915050565b82818337600083830152505050565b60006124bc8385611bed565b93506124c98385846124a1565b6124d283611c28565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61251c81612509565b82525050565b600082825260208201905092915050565b600061253e82611be2565b6125488185612522565b9350612558818560208601611bfe565b61256181611c28565b840191505092915050565b60006040830160008301516125846000860182612513565b506020830151848203602086015261259c8282612533565b9150508091505092915050565b60006125b5838361256c565b905092915050565b6000602082019050919050565b60006125d5826124dd565b6125df81856124e8565b9350836020820285016125f1856124f9565b8060005b8581101561262d578484038952815161260e85826125a9565b9450612619836125bd565b925060208a019950506001810190506125f5565b50829750879550505050505092915050565b600060608201905081810360008301526126598187612443565b9050818103602083015261266e8185876124b0565b9050818103604083015261268281846125ca565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126c782611b2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126f9576126f861268d565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026127717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612734565b61277b8683612734565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127b86127b36127ae84611b2f565b612793565b611b2f565b9050919050565b6000819050919050565b6127d28361279d565b6127e66127de826127bf565b848454612741565b825550505050565b600090565b6127fb6127ee565b6128068184846127c9565b505050565b5b8181101561282a5761281f6000826127f3565b60018101905061280c565b5050565b601f82111561286f576128408161270f565b61284984612724565b81016020851015612858578190505b61286c61286485612724565b83018261280b565b50505b505050565b600082821c905092915050565b600061289260001984600802612874565b1980831691505092915050565b60006128ab8383612881565b9150826002028217905092915050565b6128c58383612704565b67ffffffffffffffff8111156128de576128dd612356565b5b6128e88254612325565b6128f382828561282e565b6000601f8311600181146129225760008415612910578287013590505b61291a858261289f565b865550612982565b601f1984166129308661270f565b60005b8281101561295857848901358255600182019150602085019450602081019050612933565b868310156129755784890135612971601f891682612881565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b60008190508160005260206000209050919050565b601f8211156129ec576129bd81612996565b6129c684612724565b810160208510156129d5578190505b6129e96129e185612724565b83018261280b565b50505b505050565b6129fb838361298b565b67ffffffffffffffff811115612a1457612a13612356565b5b612a1e8254612325565b612a298282856129ab565b6000601f831160018114612a585760008415612a46578287013590505b612a50858261289f565b865550612ab8565b601f198416612a6686612996565b60005b82811015612a8e57848901358255600182019150602085019450602081019050612a69565b86831015612aab5784890135612aa7601f891682612881565b8355505b6001600288020188555050505b50505050505050565b6000602082019050612ad66000830184611bc4565b92915050565b600081519050612aeb81611b39565b92915050565b600060208284031215612b0757612b06611b25565b5b6000612b1584828501612adc565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612b7a602383611bed565b9150612b8582612b1e565b604082019050919050565b60006020820190508181036000830152612ba981612b6d565b9050919050565b6000612bbb82611b2f565b9150612bc683611b2f565b9250828203905081811115612bde57612bdd61268d565b5b92915050565b6000612bef82611b2f565b9150612bfa83611b2f565b9250828201905080821115612c1257612c1161268d565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612c74603183611bed565b9150612c7f82612c18565b604082019050919050565b60006020820190508181036000830152612ca381612c67565b9050919050565b600080600060608486031215612cc357612cc2611b25565b5b6000612cd186828701611b50565b9350506020612ce286828701611b50565b9250506040612cf386828701611b50565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612d33600e83611bed565b9150612d3e82612cfd565b602082019050919050565b6000604082019050612d5e6000830184611bd3565b8181036020830152612d6f81612d26565b905092915050565b6000612d8282611b2f565b9150612d8d83611b2f565b9250828202612d9b81611b2f565b91508282048414831517612db257612db161268d565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612def601683611bed565b9150612dfa82612db9565b602082019050919050565b60006020820190508181036000830152612e1e81612de2565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612e5b601483611bed565b9150612e6682612e25565b602082019050919050565b6000604082019050612e866000830184611bd3565b8181036020830152612e9781612e4e565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612ed5601683611bed565b9150612ee082612e9f565b602082019050919050565b60006020820190508181036000830152612f0481612ec8565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612f41601683611bed565b9150612f4c82612f0b565b602082019050919050565b60006020820190508181036000830152612f7081612f34565b9050919050565b60008154612f8481612325565b612f8e8186611d0f565b94506001821660008114612fa95760018114612fbf57612ff2565b60ff198316865281151560200286019350612ff2565b612fc885612996565b60005b83811015612fea57815481890152600182019150602081019050612fcb565b808801955050505b50505092915050565b60006060820190506130106000830186611bd3565b61301d6020830185611bd3565b818103604083015261302f8184612f77565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061307382611b2f565b915061307e83611b2f565b92508261308e5761308d613039565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b600061311b604e83611bed565b915061312682613099565b606082019050919050565b6000602082019050818103600083015261314a8161310e565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b60006131ad602b83611bed565b91506131b882613151565b604082019050919050565b600060208201905081810360008301526131dc816131a0565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b600061323f602d83611bed565b915061324a826131e3565b604082019050919050565b600060408201905061326a6000830184611bd3565b818103602083015261327b81613232565b905092915050565b60006060820190506132986000830186611bd3565b6132a56020830185611bd3565b6132b26040830184611bd3565b949350505050565b600081546132c781612325565b6132d18186611bed565b945060018216600081146132ec576001811461330257613335565b60ff198316865281151560200286019350613335565b61330b8561270f565b60005b8381101561332d5781548189015260018201915060208101905061330e565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061336a8383612040565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006133a061339b83613376565b613383565b9050919050565b60006133b3825461338d565b9050919050565b6000600182019050919050565b6133d08161333e565b6133da8184613349565b92506133e582613354565b8060005b8381101561341d576133fa826133a7565b613404878261335e565b965061340f836133ba565b9250506001810190506133e9565b505050505050565b6000610140820190508181036000830152613440818b6132ba565b905061344f602083018a611bd3565b61345c60408301896133c7565b61346960808301886133c7565b61347660c0830187611bd3565b61348360e0830186611cf5565b613491610100830185611cf5565b8181036101208301526134a48184611d20565b90509998505050505050505050565b60006040820190506134c86000830185611bd3565b6134d56020830184611bd3565b939250505056fea2646970667358221220d80ec4a4a8c90b2eda72e635e77c16034d285583d86f5e11799f48eca051357c64736f6c63430008180033", - "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063b4e6a1d51161004e578063b4e6a1d51461015b578063c019faab14610198578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b146100805780632805b5d9146100c557806362d26ed7146100f5578063a3bb24cc14610132575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a29190611b65565b610229565b6040516100bc99989796959493929190611d59565b60405180910390f35b6100df60048036038101906100da9190611f29565b6103c1565b6040516100ec9190611fe5565b60405180910390f35b34801561010157600080fd5b5061011c60048036038101906101179190611b65565b6106c7565b60405161012991906121e5565b60405180910390f35b34801561013e57600080fd5b5061015960048036038101906101549190612201565b610a00565b005b34801561016757600080fd5b50610182600480360381019061017d9190612241565b610beb565b60405161018f9190611fe5565b60405180910390f35b3480156101a457600080fd5b506101bf60048036038101906101ba9190611b65565b6114c0565b005b3480156101cd57600080fd5b506101d66115ec565b6040516101e39190611fe5565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e9190611b65565b6115f2565b60405161022091906122db565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e90612325565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90612325565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e90612325565b80601f016020809104026020016040519081016040528092919081815260200182805461036a90612325565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b600060606000600167ffffffffffffffff8111156103e2576103e1612356565b5b60405190808252806020026020018201604052801561041b57816020015b610408611a56565b8152602001906001900390816104005790505b5090506040518060400160405280620f424081526020018973ffffffffffffffffffffffffffffffffffffffff16815250816000815181106104605761045f612385565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d827828c8c866040518563ffffffff1660e01b81526004016104ca949392919061263f565b600060405180830381600087803b1580156104e457600080fd5b505af11580156104f8573d6000803e3d6000fd5b505050506001600081548092919061050f906126bc565b91905055925060008060008581526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508a8a8260030191826105819291906128bb565b504281600401819055508760006003811061059f5761059e612385565b5b6020020135816008016000600381106105bb576105ba612385565b5b6011020160000181905550876001600381106105da576105d9612385565b5b6020020135816008016001600381106105f6576105f5612385565b5b60110201600001819055508760026003811061061557610614612385565b5b60200201358160080160026003811061063157610630612385565b5b6011020160000181905550348160010181905550806001015481600201819055508681603b0160006101000a81548160ff021916908315150217905550858582603c0191826106819291906129f1565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e846040516106b19190611fe5565b60405180910390a1505050979650505050505050565b6106cf611a86565b60008060008481526020019081526020016000209050806008016000600381106106fc576106fb612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156107cc578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061071a565b50505050826000600381106107e4576107e3612385565b5b60200201819052508060080160016003811061080357610802612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156108d3578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610821565b50505050826001600381106108eb576108ea612385565b5b60200201819052508060080160026003811061090a57610909612385565b5b60110201600101600380602002604051908101604052809291906000905b828210156109da578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610928565b50505050826002600381106109f2576109f1612385565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610a5a9190612ac1565b602060405180830381865afa158015610a77573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a9b9190612af1565b1015610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390612b90565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054816007016000828254610b479190612bb0565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081816007016000828254610ba89190612be4565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb83604051610bde9190611fe5565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290612c8a565b60405180910390fd5b60008060008585810190610c8f9190612caa565b925092509250600080600085815260200190815260200160002090506000816008018460038110610cc357610cc2612385565b5b601102019050600081600101826010015460038110610ce557610ce4612385565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610de55760048360050160006101000a81548160ff02191690836005811115610d7f57610d7e611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610db39190612d49565b60405180910390a183836002016000828254610dcf9190612be4565b92505081905550600196505050505050506114b6565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e769190612af1565b8b8d610e829190612be4565b6002610e8e9190612d77565b1015905060016005811115610ea657610ea5611c72565b5b8460050160009054906101000a900460ff166005811115610eca57610ec9611c72565b5b03610feb5760008614610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0990612e05565b60405180910390fd5b8d8015610f1c5750805b15610f535760028460050160006101000a81548160ff02191690836005811115610f4957610f48611c72565b5b0217905550610fe6565b6002836010015410610fc85760048460050160006101000a81548160ff02191690836005811115610f8757610f86611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610fbb9190612e71565b60405180910390a1610fe5565b6001836010016000828254610fdd9190612be4565b925050819055505b5b611392565b60026005811115610fff57610ffe611c72565b5b8460050160009054906101000a900460ff16600581111561102357611022611c72565b5b03611144576001861461106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290612eeb565b60405180910390fd5b8d80156110755750805b156110ac5760038460050160006101000a81548160ff021916908360058111156110a2576110a1611c72565b5b021790555061113f565b60028360100154106111215760048460050160006101000a81548160ff021916908360058111156110e0576110df611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516111149190612e71565b60405180910390a161113e565b60018360100160008282546111369190612be4565b925050819055505b5b611391565b6003600581111561115857611157611c72565b5b8460050160009054906101000a900460ff16600581111561117c5761117b611c72565b5b0361139057600286146111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb90612f57565b60405180910390fd5b8d80156111ce5750805b156112fc5760058460050160006101000a81548160ff021916908360058111156111fb576111fa611c72565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b8760405161122f9190611fe5565b60405180910390a183603b0160009054906101000a900460ff16156112f7578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b81526004016112b293929190612ffb565b6020604051808303816000875af11580156112d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f59190612af1565b505b61138f565b60028360100154106113715760048460050160006101000a81548160ff021916908360058111156113305761132f611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb876040516113649190612e71565b60405180910390a161138e565b60018360100160008282546113869190612be4565b925050819055505b5b5b5b5b600160058111156113a6576113a5611c72565b5b8460050160009054906101000a900460ff1660058111156113ca576113c9611c72565b5b036113f0576113eb876000600a87600101546113e69190613068565b61181e565b6114aa565b6002600581111561140457611403611c72565b5b8460050160009054906101000a900460ff16600581111561142857611427611c72565b5b0361144e57611449876001600a87600101546114449190613068565b61181e565b6114a9565b6003600581111561146257611461611c72565b5b8460050160009054906101000a900460ff16600581111561148657611485611c72565b5b036114a8576114a7876002600a87600101546114a29190613068565b61181e565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156114ea576114e9611c72565b5b8160050160009054906101000a900460ff16600581111561150e5761150d611c72565b5b148061154e575060058081111561152857611527611c72565b5b8160050160009054906101000a900460ff16600581111561154c5761154b611c72565b5b145b61158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613131565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156115e6573d6000803e3d6000fd5b50505050565b60015481565b60008060008084815260200190815260200160002090506000600581111561161d5761161c611c72565b5b8160050160009054906101000a900460ff16600581111561164157611640611c72565b5b14611681576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611678906131c3565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117129190612af1565b8260070154600a6117239190612d77565b1015905060006301e13380836004015461173d9190612be4565b42119050816117c85780156117bc5760048360050160006101000a81548160ff0219169083600581111561177457611773611c72565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb856040516117a89190613255565b60405180910390a160009350505050611819565b60009350505050611819565b60018360050160006101000a81548160ff021916908360058111156117f0576117ef611c72565b5b0217905550611811856000600a866001015461180c9190613068565b61181e565b600193505050505b919050565b60008060008581526020019081526020016000209050818160020160008282546118489190612bb0565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7384846003018560080188600381106118a8576118a7612385565b5b6011020160000154600689600381106118c4576118c3612385565b5b60020201600c8a600381106118dc576118db612385565b5b6002020160028b600381106118f4576118f3612385565b5b015460058c6003811061190a57611909612385565b5b602091828204019190069054906101000a900460ff1660018e8e8e60405160200161193793929190613283565b6040516020818303038152906040526040518a63ffffffff1660e01b8152600401611969989796959493929190613425565b60206040518083038185885af1158015611987573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906119ac9190612af1565b905060008260080185600381106119c6576119c5612385565b5b6011020190506000816001018260100154600381106119e8576119e7612385565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c6734798784604051611a459291906134b3565b60405180910390a150505050505050565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b60405180606001604052806003905b611a9d611ab3565b815260200190600190039081611a955790505090565b60405180606001604052806003905b611aca611ae0565b815260200190600190039081611ac25790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b611b4281611b2f565b8114611b4d57600080fd5b50565b600081359050611b5f81611b39565b92915050565b600060208284031215611b7b57611b7a611b25565b5b6000611b8984828501611b50565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611bbd82611b92565b9050919050565b611bcd81611bb2565b82525050565b611bdc81611b2f565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611c1c578082015181840152602081019050611c01565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c4482611be2565b611c4e8185611bed565b9350611c5e818560208601611bfe565b611c6781611c28565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611cb257611cb1611c72565b5b50565b6000819050611cc382611ca1565b919050565b6000611cd382611cb5565b9050919050565b611ce381611cc8565b82525050565b60008115159050919050565b611cfe81611ce9565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611d2b82611d04565b611d358185611d0f565b9350611d45818560208601611bfe565b611d4e81611c28565b840191505092915050565b600061012082019050611d6f600083018c611bc4565b611d7c602083018b611bd3565b611d89604083018a611bd3565b8181036060830152611d9b8189611c39565b9050611daa6080830188611bd3565b611db760a0830187611cda565b611dc460c0830186611bd3565b611dd160e0830185611cf5565b818103610100830152611de48184611d20565b90509a9950505050505050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112611e1957611e18611df4565b5b8235905067ffffffffffffffff811115611e3657611e35611df9565b5b602083019150836001820283011115611e5257611e51611dfe565b5b9250929050565b611e6281611bb2565b8114611e6d57600080fd5b50565b600081359050611e7f81611e59565b92915050565b600081905082602060030282011115611ea157611ea0611dfe565b5b92915050565b611eb081611ce9565b8114611ebb57600080fd5b50565b600081359050611ecd81611ea7565b92915050565b60008083601f840112611ee957611ee8611df4565b5b8235905067ffffffffffffffff811115611f0657611f05611df9565b5b602083019150836001820283011115611f2257611f21611dfe565b5b9250929050565b600080600080600080600060e0888a031215611f4857611f47611b25565b5b600088013567ffffffffffffffff811115611f6657611f65611b2a565b5b611f728a828b01611e03565b97509750506020611f858a828b01611e70565b9550506040611f968a828b01611e85565b94505060a0611fa78a828b01611ebe565b93505060c088013567ffffffffffffffff811115611fc857611fc7611b2a565b5b611fd48a828b01611ed3565b925092505092959891949750929550565b6000602082019050611ffa6000830184611bd3565b92915050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b61204981611b2f565b82525050565b61205881611ce9565b82525050565b60e0820160008201516120746000850182612040565b506020820151612087602085018261204f565b50604082015161209a604085018261204f565b5060608201516120ad6060850182612040565b5060808201516120c06080850182612040565b5060a08201516120d360a085018261204f565b5060c08201516120e660c085018261204f565b50505050565b60006120f8838361205e565b60e08301905092915050565b6000602082019050919050565b61211a81612020565b612124818461202b565b925061212f82612036565b8060005b8381101561216057815161214787826120ec565b965061215283612104565b925050600181019050612133565b505050505050565b60006121748383612111565b6102a08301905092915050565b6000602082019050919050565b61219781612000565b6121a1818461200b565b92506121ac82612016565b8060005b838110156121dd5781516121c48782612168565b96506121cf83612181565b9250506001810190506121b0565b505050505050565b60006107e0820190506121fb600083018461218e565b92915050565b6000806040838503121561221857612217611b25565b5b600061222685828601611b50565b925050602061223785828601611b50565b9150509250929050565b60008060008060008060a0878903121561225e5761225d611b25565b5b600061226c89828a01611ebe565b965050602061227d89828a01611ebe565b955050604061228e89828a01611b50565b945050606061229f89828a01611b50565b935050608087013567ffffffffffffffff8111156122c0576122bf611b2a565b5b6122cc89828a01611ed3565b92509250509295509295509295565b60006020820190506122f06000830184611cf5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061233d57607f821691505b6020821081036123505761234f6122f6565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6123e981611bb2565b82525050565b6040820160008201516124056000850182612040565b50602082015161241860208501826123e0565b50505050565b600061242a83836123ef565b60408301905092915050565b6000602082019050919050565b600061244e826123b4565b61245881856123bf565b9350612463836123d0565b8060005b8381101561249457815161247b888261241e565b975061248683612436565b925050600181019050612467565b5085935050505092915050565b82818337600083830152505050565b60006124bc8385611bed565b93506124c98385846124a1565b6124d283611c28565b840190509392505050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000819050919050565b61251c81612509565b82525050565b600082825260208201905092915050565b600061253e82611be2565b6125488185612522565b9350612558818560208601611bfe565b61256181611c28565b840191505092915050565b60006040830160008301516125846000860182612513565b506020830151848203602086015261259c8282612533565b9150508091505092915050565b60006125b5838361256c565b905092915050565b6000602082019050919050565b60006125d5826124dd565b6125df81856124e8565b9350836020820285016125f1856124f9565b8060005b8581101561262d578484038952815161260e85826125a9565b9450612619836125bd565b925060208a019950506001810190506125f5565b50829750879550505050505092915050565b600060608201905081810360008301526126598187612443565b9050818103602083015261266e8185876124b0565b9050818103604083015261268281846125ca565b905095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006126c782611b2f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036126f9576126f861268d565b5b600182019050919050565b600082905092915050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026127717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612734565b61277b8683612734565b95508019841693508086168417925050509392505050565b6000819050919050565b60006127b86127b36127ae84611b2f565b612793565b611b2f565b9050919050565b6000819050919050565b6127d28361279d565b6127e66127de826127bf565b848454612741565b825550505050565b600090565b6127fb6127ee565b6128068184846127c9565b505050565b5b8181101561282a5761281f6000826127f3565b60018101905061280c565b5050565b601f82111561286f576128408161270f565b61284984612724565b81016020851015612858578190505b61286c61286485612724565b83018261280b565b50505b505050565b600082821c905092915050565b600061289260001984600802612874565b1980831691505092915050565b60006128ab8383612881565b9150826002028217905092915050565b6128c58383612704565b67ffffffffffffffff8111156128de576128dd612356565b5b6128e88254612325565b6128f382828561282e565b6000601f8311600181146129225760008415612910578287013590505b61291a858261289f565b865550612982565b601f1984166129308661270f565b60005b8281101561295857848901358255600182019150602085019450602081019050612933565b868310156129755784890135612971601f891682612881565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b60008190508160005260206000209050919050565b601f8211156129ec576129bd81612996565b6129c684612724565b810160208510156129d5578190505b6129e96129e185612724565b83018261280b565b50505b505050565b6129fb838361298b565b67ffffffffffffffff811115612a1457612a13612356565b5b612a1e8254612325565b612a298282856129ab565b6000601f831160018114612a585760008415612a46578287013590505b612a50858261289f565b865550612ab8565b601f198416612a6686612996565b60005b82811015612a8e57848901358255600182019150602085019450602081019050612a69565b86831015612aab5784890135612aa7601f891682612881565b8355505b6001600288020188555050505b50505050505050565b6000602082019050612ad66000830184611bc4565b92915050565b600081519050612aeb81611b39565b92915050565b600060208284031215612b0757612b06611b25565b5b6000612b1584828501612adc565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612b7a602383611bed565b9150612b8582612b1e565b604082019050919050565b60006020820190508181036000830152612ba981612b6d565b9050919050565b6000612bbb82611b2f565b9150612bc683611b2f565b9250828203905081811115612bde57612bdd61268d565b5b92915050565b6000612bef82611b2f565b9150612bfa83611b2f565b9250828201905080821115612c1257612c1161268d565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b6000612c74603183611bed565b9150612c7f82612c18565b604082019050919050565b60006020820190508181036000830152612ca381612c67565b9050919050565b600080600060608486031215612cc357612cc2611b25565b5b6000612cd186828701611b50565b9350506020612ce286828701611b50565b9250506040612cf386828701611b50565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612d33600e83611bed565b9150612d3e82612cfd565b602082019050919050565b6000604082019050612d5e6000830184611bd3565b8181036020830152612d6f81612d26565b905092915050565b6000612d8282611b2f565b9150612d8d83611b2f565b9250828202612d9b81611b2f565b91508282048414831517612db257612db161268d565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612def601683611bed565b9150612dfa82612db9565b602082019050919050565b60006020820190508181036000830152612e1e81612de2565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b6000612e5b601483611bed565b9150612e6682612e25565b602082019050919050565b6000604082019050612e866000830184611bd3565b8181036020830152612e9781612e4e565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b6000612ed5601683611bed565b9150612ee082612e9f565b602082019050919050565b60006020820190508181036000830152612f0481612ec8565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612f41601683611bed565b9150612f4c82612f0b565b602082019050919050565b60006020820190508181036000830152612f7081612f34565b9050919050565b60008154612f8481612325565b612f8e8186611d0f565b94506001821660008114612fa95760018114612fbf57612ff2565b60ff198316865281151560200286019350612ff2565b612fc885612996565b60005b83811015612fea57815481890152600182019150602081019050612fcb565b808801955050505b50505092915050565b60006060820190506130106000830186611bd3565b61301d6020830185611bd3565b818103604083015261302f8184612f77565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061307382611b2f565b915061307e83611b2f565b92508261308e5761308d613039565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b600061311b604e83611bed565b915061312682613099565b606082019050919050565b6000602082019050818103600083015261314a8161310e565b9050919050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b60006131ad602b83611bed565b91506131b882613151565b604082019050919050565b600060208201905081810360008301526131dc816131a0565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b600061323f602d83611bed565b915061324a826131e3565b604082019050919050565b600060408201905061326a6000830184611bd3565b818103602083015261327b81613232565b905092915050565b60006060820190506132986000830186611bd3565b6132a56020830185611bd3565b6132b26040830184611bd3565b949350505050565b600081546132c781612325565b6132d18186611bed565b945060018216600081146132ec576001811461330257613335565b60ff198316865281151560200286019350613335565b61330b8561270f565b60005b8381101561332d5781548189015260018201915060208101905061330e565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b600061336a8383612040565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b60006133a061339b83613376565b613383565b9050919050565b60006133b3825461338d565b9050919050565b6000600182019050919050565b6133d08161333e565b6133da8184613349565b92506133e582613354565b8060005b8381101561341d576133fa826133a7565b613404878261335e565b965061340f836133ba565b9250506001810190506133e9565b505050505050565b6000610140820190508181036000830152613440818b6132ba565b905061344f602083018a611bd3565b61345c60408301896133c7565b61346960808301886133c7565b61347660c0830187611bd3565b61348360e0830186611cf5565b613491610100830185611cf5565b8181036101208301526134a48184611d20565b90509998505050505050505050565b60006040820190506134c86000830185611bd3565b6134d56020830184611bd3565b939250505056fea2646970667358221220d80ec4a4a8c90b2eda72e635e77c16034d285583d86f5e11799f48eca051357c64736f6c63430008180033", + "bytecode": "0x60a06040526040518060600160405280600060ff168152602001600160ff168152602001606460ff1681525060029060036200003d929190620001ef565b5060405180606001604052806000151515158152602001600015151515815260200160011515151581525060059060036200007a92919062000239565b5060405180606001604052806040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff1681525081526020016040518060400160405280600160ff168152602001600a60ff168152508152506006906003620000fc929190620002d9565b5060405180606001604052806040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff1681525081526020016040518060400160405280600260ff168152602001600360ff16815250815250600c9060036200017e929190620002d9565b503480156200018c57600080fd5b5060405162003544380380620035448339818101604052810190620001b291906200044e565b808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050505062000480565b826003810192821562000226579160200282015b8281111562000225578251829060ff1690559160200191906001019062000203565b5b50905062000235919062000331565b5090565b826003601f01602090048101928215620002c65791602002820160005b838211156200029557835183826101000a81548160ff021916908315150217905550926020019260010160208160000104928301926001030262000256565b8015620002c45782816101000a81549060ff021916905560010160208160000104928301926001030262000295565b505b509050620002d5919062000331565b5090565b82600360020281019282156200031e579160200282015b828111156200031d578251829060026200030c92919062000350565b5091602001919060020190620002f0565b5b5090506200032d91906200039a565b5090565b5b808211156200034c57600081600090555060010162000332565b5090565b826002810192821562000387579160200282015b8281111562000386578251829060ff1690559160200191906001019062000364565b5b50905062000396919062000331565b5090565b5b80821115620003be5760008181620003b49190620003c2565b506002016200039b565b5090565b506000815560010160009055565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200040282620003d5565b9050919050565b60006200041682620003f5565b9050919050565b620004288162000409565b81146200043457600080fd5b50565b60008151905062000448816200041d565b92915050565b600060208284031215620004675762000466620003d0565b5b6000620004778482850162000437565b91505092915050565b60805161308c620004b8600039600081816106fd015281816108e901528181610ae3015281816115490152611717015261308c6000f3fe60806040526004361061007b5760003560e01c8063c019faab1161004e578063c019faab14610168578063cac152a414610191578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b1461008057806362d26ed7146100c5578063a3bb24cc14610102578063b4e6a1d51461012b575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a291906119f9565b610229565b6040516100bc99989796959493929190611bed565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e791906119f9565b6103c1565b6040516100f99190611e6d565b60405180910390f35b34801561010e57600080fd5b5061012960048036038101906101249190611e89565b6106fa565b005b34801561013757600080fd5b50610152600480360381019061014d9190611f5a565b6108e5565b60405161015f9190611ff4565b60405180910390f35b34801561017457600080fd5b5061018f600480360381019061018a91906119f9565b6111ba565b005b6101ab60048036038101906101a69190612087565b6112e6565b6040516101b89190611ff4565b60405180910390f35b3480156101cd57600080fd5b506101d66114b0565b6040516101e39190611ff4565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e91906119f9565b6114b6565b604051610220919061212e565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e90612178565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90612178565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e90612178565b80601f016020809104026020016040519081016040528092919081815260200182805461036a90612178565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b6103c961191a565b60008060008481526020019081526020016000209050806008016000600381106103f6576103f56121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156104c6578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610414565b50505050826000600381106104de576104dd6121a9565b5b6020020181905250806008016001600381106104fd576104fc6121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156105cd578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061051b565b50505050826001600381106105e5576105e46121a9565b5b602002018190525080600801600260038110610604576106036121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156106d4578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610622565b50505050826002600381106106ec576106eb6121a9565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161075491906121d8565b602060405180830381865afa158015610771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107959190612208565b10156107d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cd906122a7565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600701600082825461084191906122f6565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818160070160008282546108a2919061232a565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb836040516108d89190611ff4565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096c906123d0565b60405180910390fd5b6000806000858581019061098991906123f0565b9250925092506000806000858152602001908152602001600020905060008160080184600381106109bd576109bc6121a9565b5b6011020190506000816001018260100154600381106109df576109de6121a9565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610adf5760048360050160006101000a81548160ff02191690836005811115610a7957610a78611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610aad919061248f565b60405180910390a183836002016000828254610ac9919061232a565b92505081905550600196505050505050506111b0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b709190612208565b8b8d610b7c919061232a565b6002610b8891906124bd565b1015905060016005811115610ba057610b9f611b06565b5b8460050160009054906101000a900460ff166005811115610bc457610bc3611b06565b5b03610ce55760008614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061254b565b60405180910390fd5b8d8015610c165750805b15610c4d5760028460050160006101000a81548160ff02191690836005811115610c4357610c42611b06565b5b0217905550610ce0565b6002836010015410610cc25760048460050160006101000a81548160ff02191690836005811115610c8157610c80611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610cb591906125b7565b60405180910390a1610cdf565b6001836010016000828254610cd7919061232a565b925050819055505b5b61108c565b60026005811115610cf957610cf8611b06565b5b8460050160009054906101000a900460ff166005811115610d1d57610d1c611b06565b5b03610e3e5760018614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90612631565b60405180910390fd5b8d8015610d6f5750805b15610da65760038460050160006101000a81548160ff02191690836005811115610d9c57610d9b611b06565b5b0217905550610e39565b6002836010015410610e1b5760048460050160006101000a81548160ff02191690836005811115610dda57610dd9611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e0e91906125b7565b60405180910390a1610e38565b6001836010016000828254610e30919061232a565b925050819055505b5b61108b565b60036005811115610e5257610e51611b06565b5b8460050160009054906101000a900460ff166005811115610e7657610e75611b06565b5b0361108a5760028614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb59061269d565b60405180910390fd5b8d8015610ec85750805b15610ff65760058460050160006101000a81548160ff02191690836005811115610ef557610ef4611b06565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b87604051610f299190611ff4565b60405180910390a183603b0160009054906101000a900460ff1615610ff1578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b8152600401610fac93929190612756565b6020604051808303816000875af1158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fef9190612208565b505b611089565b600283601001541061106b5760048460050160006101000a81548160ff0219169083600581111561102a57611029611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161105e91906125b7565b60405180910390a1611088565b6001836010016000828254611080919061232a565b925050819055505b5b5b5b5b600160058111156110a05761109f611b06565b5b8460050160009054906101000a900460ff1660058111156110c4576110c3611b06565b5b036110ea576110e5876000600a87600101546110e091906127c3565b6116e2565b6111a4565b600260058111156110fe576110fd611b06565b5b8460050160009054906101000a900460ff16600581111561112257611121611b06565b5b0361114857611143876001600a876001015461113e91906127c3565b6116e2565b6111a3565b6003600581111561115c5761115b611b06565b5b8460050160009054906101000a900460ff1660058111156111805761117f611b06565b5b036111a2576111a1876002600a876001015461119c91906127c3565b6116e2565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156111e4576111e3611b06565b5b8160050160009054906101000a900460ff16600581111561120857611207611b06565b5b1480611248575060058081111561122257611221611b06565b5b8160050160009054906101000a900460ff16600581111561124657611245611b06565b5b145b611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e9061288c565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112e0573d6000803e3d6000fd5b50505050565b6000600160008154809291906112fb906128ac565b91905055905060008060008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878782600301918261136d929190612ada565b504281600401819055508560006003811061138b5761138a6121a9565b5b6020020135816008016000600381106113a7576113a66121a9565b5b6011020160000181905550856001600381106113c6576113c56121a9565b5b6020020135816008016001600381106113e2576113e16121a9565b5b601102016000018190555085600260038110611401576114006121a9565b5b60200201358160080160026003811061141d5761141c6121a9565b5b6011020160000181905550348160010181905550806001015481600201819055508481603b0160006101000a81548160ff021916908315150217905550838382603c01918261146d929190612bfb565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8260405161149d9190611ff4565b60405180910390a1509695505050505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114e1576114e0611b06565b5b8160050160009054906101000a900460ff16600581111561150557611504611b06565b5b14611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90612d3d565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190612208565b8260070154600a6115e791906124bd565b1015905060006301e133808360040154611601919061232a565b421190508161168c5780156116805760048360050160006101000a81548160ff0219169083600581111561163857611637611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8560405161166c9190612dcf565b60405180910390a1600093505050506116dd565b600093505050506116dd565b60018360050160006101000a81548160ff021916908360058111156116b4576116b3611b06565b5b02179055506116d5856000600a86600101546116d091906127c3565b6116e2565b600193505050505b919050565b600080600085815260200190815260200160002090508181600201600082825461170c91906122f6565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73848460030185600801886003811061176c5761176b6121a9565b5b601102016000015460068960038110611788576117876121a9565b5b60020201600c8a600381106117a05761179f6121a9565b5b6002020160028b600381106117b8576117b76121a9565b5b015460058c600381106117ce576117cd6121a9565b5b602091828204019190069054906101000a900460ff1660018e8e8e6040516020016117fb93929190612dfd565b6040516020818303038152906040526040518a63ffffffff1660e01b815260040161182d989796959493929190612f9f565b60206040518083038185885af115801561184b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118709190612208565b9050600082600801856003811061188a576118896121a9565b5b6011020190506000816001018260100154600381106118ac576118ab6121a9565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c673479878460405161190992919061302d565b60405180910390a150505050505050565b60405180606001604052806003905b611931611947565b8152602001906001900390816119295790505090565b60405180606001604052806003905b61195e611974565b8152602001906001900390816119565790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119d6816119c3565b81146119e157600080fd5b50565b6000813590506119f3816119cd565b92915050565b600060208284031215611a0f57611a0e6119b9565b5b6000611a1d848285016119e4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a5182611a26565b9050919050565b611a6181611a46565b82525050565b611a70816119c3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ab0578082015181840152602081019050611a95565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ad882611a76565b611ae28185611a81565b9350611af2818560208601611a92565b611afb81611abc565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611b4657611b45611b06565b5b50565b6000819050611b5782611b35565b919050565b6000611b6782611b49565b9050919050565b611b7781611b5c565b82525050565b60008115159050919050565b611b9281611b7d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611bbf82611b98565b611bc98185611ba3565b9350611bd9818560208601611a92565b611be281611abc565b840191505092915050565b600061012082019050611c03600083018c611a58565b611c10602083018b611a67565b611c1d604083018a611a67565b8181036060830152611c2f8189611acd565b9050611c3e6080830188611a67565b611c4b60a0830187611b6e565b611c5860c0830186611a67565b611c6560e0830185611b89565b818103610100830152611c788184611bb4565b90509a9950505050505050505050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611cd1816119c3565b82525050565b611ce081611b7d565b82525050565b60e082016000820151611cfc6000850182611cc8565b506020820151611d0f6020850182611cd7565b506040820151611d226040850182611cd7565b506060820151611d356060850182611cc8565b506080820151611d486080850182611cc8565b5060a0820151611d5b60a0850182611cd7565b5060c0820151611d6e60c0850182611cd7565b50505050565b6000611d808383611ce6565b60e08301905092915050565b6000602082019050919050565b611da281611ca8565b611dac8184611cb3565b9250611db782611cbe565b8060005b83811015611de8578151611dcf8782611d74565b9650611dda83611d8c565b925050600181019050611dbb565b505050505050565b6000611dfc8383611d99565b6102a08301905092915050565b6000602082019050919050565b611e1f81611c88565b611e298184611c93565b9250611e3482611c9e565b8060005b83811015611e65578151611e4c8782611df0565b9650611e5783611e09565b925050600181019050611e38565b505050505050565b60006107e082019050611e836000830184611e16565b92915050565b60008060408385031215611ea057611e9f6119b9565b5b6000611eae858286016119e4565b9250506020611ebf858286016119e4565b9150509250929050565b611ed281611b7d565b8114611edd57600080fd5b50565b600081359050611eef81611ec9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f1a57611f19611ef5565b5b8235905067ffffffffffffffff811115611f3757611f36611efa565b5b602083019150836001820283011115611f5357611f52611eff565b5b9250929050565b60008060008060008060a08789031215611f7757611f766119b9565b5b6000611f8589828a01611ee0565b9650506020611f9689828a01611ee0565b9550506040611fa789828a016119e4565b9450506060611fb889828a016119e4565b935050608087013567ffffffffffffffff811115611fd957611fd86119be565b5b611fe589828a01611f04565b92509250509295509295509295565b60006020820190506120096000830184611a67565b92915050565b60008083601f84011261202557612024611ef5565b5b8235905067ffffffffffffffff81111561204257612041611efa565b5b60208301915083600182028301111561205e5761205d611eff565b5b9250929050565b60008190508260206003028201111561208157612080611eff565b5b92915050565b60008060008060008060c087890312156120a4576120a36119b9565b5b600087013567ffffffffffffffff8111156120c2576120c16119be565b5b6120ce89828a0161200f565b965096505060206120e189828a01612065565b94505060806120f289828a01611ee0565b93505060a087013567ffffffffffffffff811115612113576121126119be565b5b61211f89828a01611f04565b92509250509295509295509295565b60006020820190506121436000830184611b89565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219057607f821691505b6020821081036121a3576121a2612149565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190506121ed6000830184611a58565b92915050565b600081519050612202816119cd565b92915050565b60006020828403121561221e5761221d6119b9565b5b600061222c848285016121f3565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612291602383611a81565b915061229c82612235565b604082019050919050565b600060208201905081810360008301526122c081612284565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612301826119c3565b915061230c836119c3565b9250828203905081811115612324576123236122c7565b5b92915050565b6000612335826119c3565b9150612340836119c3565b9250828201905080821115612358576123576122c7565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006123ba603183611a81565b91506123c58261235e565b604082019050919050565b600060208201905081810360008301526123e9816123ad565b9050919050565b600080600060608486031215612409576124086119b9565b5b6000612417868287016119e4565b9350506020612428868287016119e4565b9250506040612439868287016119e4565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612479600e83611a81565b915061248482612443565b602082019050919050565b60006040820190506124a46000830184611a67565b81810360208301526124b58161246c565b905092915050565b60006124c8826119c3565b91506124d3836119c3565b92508282026124e1816119c3565b915082820484148315176124f8576124f76122c7565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612535601683611a81565b9150612540826124ff565b602082019050919050565b6000602082019050818103600083015261256481612528565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b60006125a1601483611a81565b91506125ac8261256b565b602082019050919050565b60006040820190506125cc6000830184611a67565b81810360208301526125dd81612594565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b600061261b601683611a81565b9150612626826125e5565b602082019050919050565b6000602082019050818103600083015261264a8161260e565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612687601683611a81565b915061269282612651565b602082019050919050565b600060208201905081810360008301526126b68161267a565b9050919050565b60008190508160005260206000209050919050565b600081546126df81612178565b6126e98186611ba3565b94506001821660008114612704576001811461271a5761274d565b60ff19831686528115156020028601935061274d565b612723856126bd565b60005b8381101561274557815481890152600182019150602081019050612726565b808801955050505b50505092915050565b600060608201905061276b6000830186611a67565b6127786020830185611a67565b818103604083015261278a81846126d2565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127ce826119c3565b91506127d9836119c3565b9250826127e9576127e8612794565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612876604e83611a81565b9150612881826127f4565b606082019050919050565b600060208201905081810360008301526128a581612869565b9050919050565b60006128b7826119c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128e9576128e86122c7565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026129907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612953565b61299a8683612953565b95508019841693508086168417925050509392505050565b6000819050919050565b60006129d76129d26129cd846119c3565b6129b2565b6119c3565b9050919050565b6000819050919050565b6129f1836129bc565b612a056129fd826129de565b848454612960565b825550505050565b600090565b612a1a612a0d565b612a258184846129e8565b505050565b5b81811015612a4957612a3e600082612a12565b600181019050612a2b565b5050565b601f821115612a8e57612a5f8161292e565b612a6884612943565b81016020851015612a77578190505b612a8b612a8385612943565b830182612a2a565b50505b505050565b600082821c905092915050565b6000612ab160001984600802612a93565b1980831691505092915050565b6000612aca8383612aa0565b9150826002028217905092915050565b612ae483836128f4565b67ffffffffffffffff811115612afd57612afc6128ff565b5b612b078254612178565b612b12828285612a4d565b6000601f831160018114612b415760008415612b2f578287013590505b612b398582612abe565b865550612ba1565b601f198416612b4f8661292e565b60005b82811015612b7757848901358255600182019150602085019450602081019050612b52565b86831015612b945784890135612b90601f891682612aa0565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f821115612bf657612bc7816126bd565b612bd084612943565b81016020851015612bdf578190505b612bf3612beb85612943565b830182612a2a565b50505b505050565b612c058383612baa565b67ffffffffffffffff811115612c1e57612c1d6128ff565b5b612c288254612178565b612c33828285612bb5565b6000601f831160018114612c625760008415612c50578287013590505b612c5a8582612abe565b865550612cc2565b601f198416612c70866126bd565b60005b82811015612c9857848901358255600182019150602085019450602081019050612c73565b86831015612cb55784890135612cb1601f891682612aa0565b8355505b6001600288020188555050505b50505050505050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612d27602b83611a81565b9150612d3282612ccb565b604082019050919050565b60006020820190508181036000830152612d5681612d1a565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612db9602d83611a81565b9150612dc482612d5d565b604082019050919050565b6000604082019050612de46000830184611a67565b8181036020830152612df581612dac565b905092915050565b6000606082019050612e126000830186611a67565b612e1f6020830185611a67565b612e2c6040830184611a67565b949350505050565b60008154612e4181612178565b612e4b8186611a81565b94506001821660008114612e665760018114612e7c57612eaf565b60ff198316865281151560200286019350612eaf565b612e858561292e565b60005b83811015612ea757815481890152600182019150602081019050612e88565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612ee48383611cc8565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612f1a612f1583612ef0565b612efd565b9050919050565b6000612f2d8254612f07565b9050919050565b6000600182019050919050565b612f4a81612eb8565b612f548184612ec3565b9250612f5f82612ece565b8060005b83811015612f9757612f7482612f21565b612f7e8782612ed8565b9650612f8983612f34565b925050600181019050612f63565b505050505050565b6000610140820190508181036000830152612fba818b612e34565b9050612fc9602083018a611a67565b612fd66040830189612f41565b612fe36080830188612f41565b612ff060c0830187611a67565b612ffd60e0830186611b89565b61300b610100830185611b89565b81810361012083015261301e8184611bb4565b90509998505050505050505050565b60006040820190506130426000830185611a67565b61304f6020830184611a67565b939250505056fea2646970667358221220cbebbb046abde709d5482e1b80f77771c6a1699cb8b1fdaec3d2bd6c09368e1b64736f6c63430008180033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c8063c019faab1161004e578063c019faab14610168578063cac152a414610191578063da35c664146101c1578063ea923e63146101ec5761007b565b8063013cf08b1461008057806362d26ed7146100c5578063a3bb24cc14610102578063b4e6a1d51461012b575b600080fd5b34801561008c57600080fd5b506100a760048036038101906100a291906119f9565b610229565b6040516100bc99989796959493929190611bed565b60405180910390f35b3480156100d157600080fd5b506100ec60048036038101906100e791906119f9565b6103c1565b6040516100f99190611e6d565b60405180910390f35b34801561010e57600080fd5b5061012960048036038101906101249190611e89565b6106fa565b005b34801561013757600080fd5b50610152600480360381019061014d9190611f5a565b6108e5565b60405161015f9190611ff4565b60405180910390f35b34801561017457600080fd5b5061018f600480360381019061018a91906119f9565b6111ba565b005b6101ab60048036038101906101a69190612087565b6112e6565b6040516101b89190611ff4565b60405180910390f35b3480156101cd57600080fd5b506101d66114b0565b6040516101e39190611ff4565b60405180910390f35b3480156101f857600080fd5b50610213600480360381019061020e91906119f9565b6114b6565b604051610220919061212e565b60405180910390f35b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600101549080600201549080600301805461027e90612178565b80601f01602080910402602001604051908101604052809291908181526020018280546102aa90612178565b80156102f75780601f106102cc576101008083540402835291602001916102f7565b820191906000526020600020905b8154815290600101906020018083116102da57829003601f168201915b5050505050908060040154908060050160009054906101000a900460ff169080600701549080603b0160009054906101000a900460ff169080603c01805461033e90612178565b80601f016020809104026020016040519081016040528092919081815260200182805461036a90612178565b80156103b75780601f1061038c576101008083540402835291602001916103b7565b820191906000526020600020905b81548152906001019060200180831161039a57829003601f168201915b5050505050905089565b6103c961191a565b60008060008481526020019081526020016000209050806008016000600381106103f6576103f56121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156104c6578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610414565b50505050826000600381106104de576104dd6121a9565b5b6020020181905250806008016001600381106104fd576104fc6121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156105cd578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff1615151515815250508152602001906001019061051b565b50505050826001600381106105e5576105e46121a9565b5b602002018190525080600801600260038110610604576106036121a9565b5b60110201600101600380602002604051908101604052809291906000905b828210156106d4578382600502016040518060e0016040529081600082015481526020016001820160009054906101000a900460ff161515151581526020016001820160019054906101000a900460ff1615151515815260200160028201548152602001600382015481526020016004820160009054906101000a900460ff161515151581526020016004820160019054906101000a900460ff16151515158152505081526020019060010190610622565b50505050826002600381106106ec576106eb6121a9565b5b602002018190525050919050565b807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161075491906121d8565b602060405180830381865afa158015610771573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107959190612208565b10156107d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cd906122a7565b60405180910390fd5b600080600084815260200190815260200160002090508060060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481600701600082825461084191906122f6565b92505081905550818160060160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550818160070160008282546108a2919061232a565b925050819055507fc23775ba00d23f337b9f790bd67eb5194aa9b95876933f9ccd1887becbb55ccb836040516108d89190611ff4565b60405180910390a1505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161096c906123d0565b60405180910390fd5b6000806000858581019061098991906123f0565b9250925092506000806000858152602001908152602001600020905060008160080184600381106109bd576109bc6121a9565b5b6011020190506000816001018260100154600381106109df576109de6121a9565b5b60050201905060018160010160016101000a81548160ff0219169083151502179055508a81600201819055508981600301819055508b8160040160016101000a81548160ff0219169083151502179055508c8160040160006101000a81548160ff0219169083151502179055508b610adf5760048360050160006101000a81548160ff02191690836005811115610a7957610a78611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb86604051610aad919061248f565b60405180910390a183836002016000828254610ac9919061232a565b92505081905550600196505050505050506111b0565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b709190612208565b8b8d610b7c919061232a565b6002610b8891906124bd565b1015905060016005811115610ba057610b9f611b06565b5b8460050160009054906101000a900460ff166005811115610bc457610bc3611b06565b5b03610ce55760008614610c0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c039061254b565b60405180910390fd5b8d8015610c165750805b15610c4d5760028460050160006101000a81548160ff02191690836005811115610c4357610c42611b06565b5b0217905550610ce0565b6002836010015410610cc25760048460050160006101000a81548160ff02191690836005811115610c8157610c80611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610cb591906125b7565b60405180910390a1610cdf565b6001836010016000828254610cd7919061232a565b925050819055505b5b61108c565b60026005811115610cf957610cf8611b06565b5b8460050160009054906101000a900460ff166005811115610d1d57610d1c611b06565b5b03610e3e5760018614610d65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5c90612631565b60405180910390fd5b8d8015610d6f5750805b15610da65760038460050160006101000a81548160ff02191690836005811115610d9c57610d9b611b06565b5b0217905550610e39565b6002836010015410610e1b5760048460050160006101000a81548160ff02191690836005811115610dda57610dd9611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb87604051610e0e91906125b7565b60405180910390a1610e38565b6001836010016000828254610e30919061232a565b925050819055505b5b61108b565b60036005811115610e5257610e51611b06565b5b8460050160009054906101000a900460ff166005811115610e7657610e75611b06565b5b0361108a5760028614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb59061269d565b60405180910390fd5b8d8015610ec85750805b15610ff65760058460050160006101000a81548160ff02191690836005811115610ef557610ef4611b06565b5b02179055507fd24c2047577899547bacebb29e319fc7d73f6712b5adb401d45556f34bb2aa3b87604051610f299190611ff4565b60405180910390a183603b0160009054906101000a900460ff1615610ff1578360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663815a05728d8d87603c016040518463ffffffff1660e01b8152600401610fac93929190612756565b6020604051808303816000875af1158015610fcb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fef9190612208565b505b611089565b600283601001541061106b5760048460050160006101000a81548160ff0219169083600581111561102a57611029611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8760405161105e91906125b7565b60405180910390a1611088565b6001836010016000828254611080919061232a565b925050819055505b5b5b5b5b600160058111156110a05761109f611b06565b5b8460050160009054906101000a900460ff1660058111156110c4576110c3611b06565b5b036110ea576110e5876000600a87600101546110e091906127c3565b6116e2565b6111a4565b600260058111156110fe576110fd611b06565b5b8460050160009054906101000a900460ff16600581111561112257611121611b06565b5b0361114857611143876001600a876001015461113e91906127c3565b6116e2565b6111a3565b6003600581111561115c5761115b611b06565b5b8460050160009054906101000a900460ff1660058111156111805761117f611b06565b5b036111a2576111a1876002600a876001015461119c91906127c3565b6116e2565b5b5b5b60009750505050505050505b9695505050505050565b60008060008381526020019081526020016000209050600460058111156111e4576111e3611b06565b5b8160050160009054906101000a900460ff16600581111561120857611207611b06565b5b1480611248575060058081111561122257611221611b06565b5b8160050160009054906101000a900460ff16600581111561124657611245611b06565b5b145b611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e9061288c565b60405180910390fd5b600081600201549050600082600201819055503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112e0573d6000803e3d6000fd5b50505050565b6000600160008154809291906112fb906128ac565b91905055905060008060008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550878782600301918261136d929190612ada565b504281600401819055508560006003811061138b5761138a6121a9565b5b6020020135816008016000600381106113a7576113a66121a9565b5b6011020160000181905550856001600381106113c6576113c56121a9565b5b6020020135816008016001600381106113e2576113e16121a9565b5b601102016000018190555085600260038110611401576114006121a9565b5b60200201358160080160026003811061141d5761141c6121a9565b5b6011020160000181905550348160010181905550806001015481600201819055508481603b0160006101000a81548160ff021916908315150217905550838382603c01918261146d929190612bfb565b507f9a863892f20a6b9c6cec64d611b5864be6373191ce2cacc3b05a299bce3bf80e8260405161149d9190611ff4565b60405180910390a1509695505050505050565b60015481565b6000806000808481526020019081526020016000209050600060058111156114e1576114e0611b06565b5b8160050160009054906101000a900460ff16600581111561150557611504611b06565b5b14611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c90612d3d565b60405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d69190612208565b8260070154600a6115e791906124bd565b1015905060006301e133808360040154611601919061232a565b421190508161168c5780156116805760048360050160006101000a81548160ff0219169083600581111561163857611637611b06565b5b02179055507f2a15f4605f8e68cbaccd2234253a8189163d500a6f60c1751405443ca1562beb8560405161166c9190612dcf565b60405180910390a1600093505050506116dd565b600093505050506116dd565b60018360050160006101000a81548160ff021916908360058111156116b4576116b3611b06565b5b02179055506116d5856000600a86600101546116d091906127c3565b6116e2565b600193505050505b919050565b600080600085815260200190815260200160002090508181600201600082825461170c91906122f6565b9250508190555060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c73848460030185600801886003811061176c5761176b6121a9565b5b601102016000015460068960038110611788576117876121a9565b5b60020201600c8a600381106117a05761179f6121a9565b5b6002020160028b600381106117b8576117b76121a9565b5b015460058c600381106117ce576117cd6121a9565b5b602091828204019190069054906101000a900460ff1660018e8e8e6040516020016117fb93929190612dfd565b6040516020818303038152906040526040518a63ffffffff1660e01b815260040161182d989796959493929190612f9f565b60206040518083038185885af115801561184b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906118709190612208565b9050600082600801856003811061188a576118896121a9565b5b6011020190506000816001018260100154600381106118ac576118ab6121a9565b5b60050201905082816000018190555060018160010160006101000a81548160ff0219169083151502179055507f4c14e16a98683e5b8bd70d51192048d0499fb3999b27ff1e9dce7e4a2c673479878460405161190992919061302d565b60405180910390a150505050505050565b60405180606001604052806003905b611931611947565b8152602001906001900390816119295790505090565b60405180606001604052806003905b61195e611974565b8152602001906001900390816119565790505090565b6040518060e001604052806000815260200160001515815260200160001515815260200160008152602001600081526020016000151581526020016000151581525090565b600080fd5b600080fd5b6000819050919050565b6119d6816119c3565b81146119e157600080fd5b50565b6000813590506119f3816119cd565b92915050565b600060208284031215611a0f57611a0e6119b9565b5b6000611a1d848285016119e4565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611a5182611a26565b9050919050565b611a6181611a46565b82525050565b611a70816119c3565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611ab0578082015181840152602081019050611a95565b60008484015250505050565b6000601f19601f8301169050919050565b6000611ad882611a76565b611ae28185611a81565b9350611af2818560208601611a92565b611afb81611abc565b840191505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60068110611b4657611b45611b06565b5b50565b6000819050611b5782611b35565b919050565b6000611b6782611b49565b9050919050565b611b7781611b5c565b82525050565b60008115159050919050565b611b9281611b7d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000611bbf82611b98565b611bc98185611ba3565b9350611bd9818560208601611a92565b611be281611abc565b840191505092915050565b600061012082019050611c03600083018c611a58565b611c10602083018b611a67565b611c1d604083018a611a67565b8181036060830152611c2f8189611acd565b9050611c3e6080830188611a67565b611c4b60a0830187611b6e565b611c5860c0830186611a67565b611c6560e0830185611b89565b818103610100830152611c788184611bb4565b90509a9950505050505050505050565b600060039050919050565b600081905092915050565b6000819050919050565b600060039050919050565b600081905092915050565b6000819050919050565b611cd1816119c3565b82525050565b611ce081611b7d565b82525050565b60e082016000820151611cfc6000850182611cc8565b506020820151611d0f6020850182611cd7565b506040820151611d226040850182611cd7565b506060820151611d356060850182611cc8565b506080820151611d486080850182611cc8565b5060a0820151611d5b60a0850182611cd7565b5060c0820151611d6e60c0850182611cd7565b50505050565b6000611d808383611ce6565b60e08301905092915050565b6000602082019050919050565b611da281611ca8565b611dac8184611cb3565b9250611db782611cbe565b8060005b83811015611de8578151611dcf8782611d74565b9650611dda83611d8c565b925050600181019050611dbb565b505050505050565b6000611dfc8383611d99565b6102a08301905092915050565b6000602082019050919050565b611e1f81611c88565b611e298184611c93565b9250611e3482611c9e565b8060005b83811015611e65578151611e4c8782611df0565b9650611e5783611e09565b925050600181019050611e38565b505050505050565b60006107e082019050611e836000830184611e16565b92915050565b60008060408385031215611ea057611e9f6119b9565b5b6000611eae858286016119e4565b9250506020611ebf858286016119e4565b9150509250929050565b611ed281611b7d565b8114611edd57600080fd5b50565b600081359050611eef81611ec9565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611f1a57611f19611ef5565b5b8235905067ffffffffffffffff811115611f3757611f36611efa565b5b602083019150836001820283011115611f5357611f52611eff565b5b9250929050565b60008060008060008060a08789031215611f7757611f766119b9565b5b6000611f8589828a01611ee0565b9650506020611f9689828a01611ee0565b9550506040611fa789828a016119e4565b9450506060611fb889828a016119e4565b935050608087013567ffffffffffffffff811115611fd957611fd86119be565b5b611fe589828a01611f04565b92509250509295509295509295565b60006020820190506120096000830184611a67565b92915050565b60008083601f84011261202557612024611ef5565b5b8235905067ffffffffffffffff81111561204257612041611efa565b5b60208301915083600182028301111561205e5761205d611eff565b5b9250929050565b60008190508260206003028201111561208157612080611eff565b5b92915050565b60008060008060008060c087890312156120a4576120a36119b9565b5b600087013567ffffffffffffffff8111156120c2576120c16119be565b5b6120ce89828a0161200f565b965096505060206120e189828a01612065565b94505060806120f289828a01611ee0565b93505060a087013567ffffffffffffffff811115612113576121126119be565b5b61211f89828a01611f04565b92509250509295509295509295565b60006020820190506121436000830184611b89565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219057607f821691505b6020821081036121a3576121a2612149565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020820190506121ed6000830184611a58565b92915050565b600081519050612202816119cd565b92915050565b60006020828403121561221e5761221d6119b9565b5b600061222c848285016121f3565b91505092915050565b7f53656e6465722068617320696e73756666696369656e74205245502062616c6160008201527f6e63650000000000000000000000000000000000000000000000000000000000602082015250565b6000612291602383611a81565b915061229c82612235565b604082019050919050565b600060208201905081810360008301526122c081612284565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612301826119c3565b915061230c836119c3565b9250828203905081811115612324576123236122c7565b5b92915050565b6000612335826119c3565b9150612340836119c3565b9250828201905080821115612358576123576122c7565b5b92915050565b7f6f6e56616c6964617465206d6179206f6e6c792062652063616c6c656420627960008201527f207468652044414f20636f6e7472616374000000000000000000000000000000602082015250565b60006123ba603183611a81565b91506123c58261235e565b604082019050919050565b600060208201905081810360008301526123e9816123ad565b9050919050565b600080600060608486031215612409576124086119b9565b5b6000612417868287016119e4565b9350506020612428868287016119e4565b9250506040612439868287016119e4565b9150509250925092565b7f51756f72756d206e6f74206d6574000000000000000000000000000000000000600082015250565b6000612479600e83611a81565b915061248482612443565b602082019050919050565b60006040820190506124a46000830184611a67565b81810360208301526124b58161246c565b905092915050565b60006124c8826119c3565b91506124d3836119c3565b92508282026124e1816119c3565b915082820484148315176124f8576124f76122c7565b5b5092915050565b7f5374616765203020696e646578206d69736d6174636800000000000000000000600082015250565b6000612535601683611a81565b9150612540826124ff565b602082019050919050565b6000602082019050818103600083015261256481612528565b9050919050565b7f526574727920636f756e74206578636565646564000000000000000000000000600082015250565b60006125a1601483611a81565b91506125ac8261256b565b602082019050919050565b60006040820190506125cc6000830184611a67565b81810360208301526125dd81612594565b905092915050565b7f5374616765203120696e646578206d69736d6174636800000000000000000000600082015250565b600061261b601683611a81565b9150612626826125e5565b602082019050919050565b6000602082019050818103600083015261264a8161260e565b9050919050565b7f5374616765203220696e646578206d69736d6174636800000000000000000000600082015250565b6000612687601683611a81565b915061269282612651565b602082019050919050565b600060208201905081810360008301526126b68161267a565b9050919050565b60008190508160005260206000209050919050565b600081546126df81612178565b6126e98186611ba3565b94506001821660008114612704576001811461271a5761274d565b60ff19831686528115156020028601935061274d565b612723856126bd565b60005b8381101561274557815481890152600182019150602081019050612726565b808801955050505b50505092915050565b600060608201905061276b6000830186611a67565b6127786020830185611a67565b818103604083015261278a81846126d2565b9050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127ce826119c3565b91506127d9836119c3565b9250826127e9576127e8612794565b5b828204905092915050565b7f52656d61696e696e6720666565732063616e206f6e6c79206265207265636c6160008201527f696d6564207768656e2070726f706f73616c20686173206265656e206163636560208201527f70746564206f72206661696c6564000000000000000000000000000000000000604082015250565b6000612876604e83611a81565b9150612881826127f4565b606082019050919050565b600060208201905081810360008301526128a581612869565b9050919050565b60006128b7826119c3565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128e9576128e86122c7565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026129907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612953565b61299a8683612953565b95508019841693508086168417925050509392505050565b6000819050919050565b60006129d76129d26129cd846119c3565b6129b2565b6119c3565b9050919050565b6000819050919050565b6129f1836129bc565b612a056129fd826129de565b848454612960565b825550505050565b600090565b612a1a612a0d565b612a258184846129e8565b505050565b5b81811015612a4957612a3e600082612a12565b600181019050612a2b565b5050565b601f821115612a8e57612a5f8161292e565b612a6884612943565b81016020851015612a77578190505b612a8b612a8385612943565b830182612a2a565b50505b505050565b600082821c905092915050565b6000612ab160001984600802612a93565b1980831691505092915050565b6000612aca8383612aa0565b9150826002028217905092915050565b612ae483836128f4565b67ffffffffffffffff811115612afd57612afc6128ff565b5b612b078254612178565b612b12828285612a4d565b6000601f831160018114612b415760008415612b2f578287013590505b612b398582612abe565b865550612ba1565b601f198416612b4f8661292e565b60005b82811015612b7757848901358255600182019150602085019450602081019050612b52565b86831015612b945784890135612b90601f891682612aa0565b8355505b6001600288020188555050505b50505050505050565b600082905092915050565b601f821115612bf657612bc7816126bd565b612bd084612943565b81016020851015612bdf578190505b612bf3612beb85612943565b830182612a2a565b50505b505050565b612c058383612baa565b67ffffffffffffffff811115612c1e57612c1d6128ff565b5b612c288254612178565b612c33828285612bb5565b6000601f831160018114612c625760008415612c50578287013590505b612c5a8582612abe565b865550612cc2565b601f198416612c70866126bd565b60005b82811015612c9857848901358255600182019150602085019450602081019050612c73565b86831015612cb55784890135612cb1601f891682612aa0565b8355505b6001600288020188555050505b50505050505050565b7f4174746573746174696f6e206f6e6c79207065727461696e7320746f2050726f60008201527f706f73616c207374616765000000000000000000000000000000000000000000602082015250565b6000612d27602b83611a81565b9150612d3282612ccb565b604082019050919050565b60006020820190508181036000830152612d5681612d1a565b9050919050565b7f4578706972656420776974686f7574206d656574696e6720617474657374617460008201527f696f6e207468726573686f6c6400000000000000000000000000000000000000602082015250565b6000612db9602d83611a81565b9150612dc482612d5d565b604082019050919050565b6000604082019050612de46000830184611a67565b8181036020830152612df581612dac565b905092915050565b6000606082019050612e126000830186611a67565b612e1f6020830185611a67565b612e2c6040830184611a67565b949350505050565b60008154612e4181612178565b612e4b8186611a81565b94506001821660008114612e665760018114612e7c57612eaf565b60ff198316865281151560200286019350612eaf565b612e858561292e565b60005b83811015612ea757815481890152600182019150602081019050612e88565b808801955050505b50505092915050565b600060029050919050565b600081905092915050565b6000819050919050565b6000612ee48383611cc8565b60208301905092915050565b60008160001c9050919050565b6000819050919050565b6000612f1a612f1583612ef0565b612efd565b9050919050565b6000612f2d8254612f07565b9050919050565b6000600182019050919050565b612f4a81612eb8565b612f548184612ec3565b9250612f5f82612ece565b8060005b83811015612f9757612f7482612f21565b612f7e8782612ed8565b9650612f8983612f34565b925050600181019050612f63565b505050505050565b6000610140820190508181036000830152612fba818b612e34565b9050612fc9602083018a611a67565b612fd66040830189612f41565b612fe36080830188612f41565b612ff060c0830187611a67565b612ffd60e0830186611b89565b61300b610100830185611b89565b81810361012083015261301e8184611bb4565b90509998505050505050505050565b60006040820190506130426000830185611a67565b61304f6020830184611a67565b939250505056fea2646970667358221220cbebbb046abde709d5482e1b80f77771c6a1699cb8b1fdaec3d2bd6c09368e1b64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/frontend/contractArtifacts/Rollup.json b/frontend/contractArtifacts/Rollup.json new file mode 100644 index 0000000..9072afb --- /dev/null +++ b/frontend/contractArtifacts/Rollup.json @@ -0,0 +1,175 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Rollup", + "sourceName": "contracts/Rollup.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract DAO", + "name": "dao", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + } + ], + "name": "AvailabilityStaked", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "acceptAvailability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "author", + "type": "address" + }, + { + "internalType": "uint256", + "name": "stakeAmount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "postId", + "type": "string" + } + ], + "name": "addItem", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "extendAvailability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "stakeCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "stakes", + "outputs": [ + { + "internalType": "address", + "name": "worker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "assigned", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "batchPostId", + "type": "string" + }, + { + "internalType": "uint256", + "name": "batchSize", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "poolDuration", + "type": "uint256" + } + ], + "name": "submitBatch", + "outputs": [ + { + "internalType": "uint256", + "name": "poolIndex", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162001d8a38038062001d8a8339818101604052810190620000379190620000f4565b80808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050505062000126565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000a8826200007b565b9050919050565b6000620000bc826200009b565b9050919050565b620000ce81620000af565b8114620000da57600080fd5b50565b600081519050620000ee81620000c3565b92915050565b6000602082840312156200010d576200010c62000076565b5b60006200011d84828501620000dd565b91505092915050565b608051611c3362000157600039600081816101720152818161065b0152818161074401526108860152611c336000f3fe6080604052600436106100555760003560e01c8063216ed6ad1461005a578063b5b20c0014610083578063c4a9e116146100ac578063d5a44f86146100d7578063da553ec214610117578063f85c5a8a14610154575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c9190610de8565b610170565b005b34801561008f57600080fd5b506100aa60048036038101906100a59190610e3b565b610310565b005b3480156100b857600080fd5b506100c1610484565b6040516100ce9190610e8a565b60405180910390f35b3480156100e357600080fd5b506100fe60048036038101906100f99190610ea5565b61048a565b60405161010e9493929190610efc565b60405180910390f35b34801561012357600080fd5b5061013e60048036038101906101399190610fa6565b6104e7565b60405161014b9190610e8a565b60405180910390f35b61016e6004803603810190610169919061101a565b610af5565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f590611111565b60405180910390fd5b60008211610241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102389061117d565b60405180910390fd5b600060016000815480929190610256906111cc565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426102ca9190611214565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516103019190610e8a565b60405180910390a15050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af906112ba565b60405180910390fd5b8060030160009054906101000a900460ff161561040a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104019061134c565b60405180910390fd5b806002015442111561042f5781426104229190611214565b8160020181905550610448565b81816002015461043f9190611214565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516104779190610e8a565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b600060035483111561052e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610525906113b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b9061144a565b60405180910390fd5b5b600080600090505b600354811015610658576002600082815260200190815260200160002060020154826106499190611214565b9150808060010191505061061d565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382888887604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b81526004016106f09897969594939291906115de565b60206040518083038185885af115801561070e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107339190611681565b915060005b60035481101561082d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846002600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206001015460016040518563ffffffff1660e01b81526004016107ee94939291906116ae565b600060405180830381600087803b15801561080857600080fd5b505af115801561081c573d6000803e3d6000fd5b505050508080600101915050610738565b50600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610950577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060055481526020019081526020016000206001015460016040518563ffffffff1660e01b815260040161091d94939291906116ae565b600060405180830381600087803b15801561093757600080fd5b505af115801561094b573d6000803e3d6000fd5b505050505b600354841015610a5d5760005b8460035461096b91906116f3565b811015610a43576002600082876109829190611214565b8152602001908152602001600020600260008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015560038201816003019081610a32919061196e565b50905050808060010191505061095d565b5083600354610a5291906116f3565b600381905550610a66565b60006003819055505b610a6e610b92565b600581905550600080600554815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050949350505050565b60006002600060036000815480929190610b0e906111cc565b9190505581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600101819055503481600201819055508282826003019182610b8a929190611a61565b505050505050565b6000610b9c610bd5565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b600154811015610c595760008082815260200190815260200160002060030160009054906101000a900460ff16610c4c57600080828152602001908152602001600020600201544211610c4c576000808281526020019081526020016000206001015482610c499190611214565b91505b8080600101915050610bdb565b5060008111610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490611b7d565b60405180910390fd5b60008144610cab9190611bcc565b9050600080600090505b600154811015610d435760008082815260200190815260200160002060030160009054906101000a900460ff16610d3657600080828152602001908152602001600020600201544211610d36576000808281526020019081526020016000206001015482610d239190611214565b915082821115610d3557809450610d43565b5b8080600101915050610cb5565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d7f82610d54565b9050919050565b610d8f81610d74565b8114610d9a57600080fd5b50565b600081359050610dac81610d86565b92915050565b6000819050919050565b610dc581610db2565b8114610dd057600080fd5b50565b600081359050610de281610dbc565b92915050565b600080600060608486031215610e0157610e00610d4a565b5b6000610e0f86828701610d9d565b9350506020610e2086828701610dd3565b9250506040610e3186828701610dd3565b9150509250925092565b60008060408385031215610e5257610e51610d4a565b5b6000610e6085828601610dd3565b9250506020610e7185828601610dd3565b9150509250929050565b610e8481610db2565b82525050565b6000602082019050610e9f6000830184610e7b565b92915050565b600060208284031215610ebb57610eba610d4a565b5b6000610ec984828501610dd3565b91505092915050565b610edb81610d74565b82525050565b60008115159050919050565b610ef681610ee1565b82525050565b6000608082019050610f116000830187610ed2565b610f1e6020830186610e7b565b610f2b6040830185610e7b565b610f386060830184610eed565b95945050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112610f6657610f65610f41565b5b8235905067ffffffffffffffff811115610f8357610f82610f46565b5b602083019150836001820283011115610f9f57610f9e610f4b565b5b9250929050565b60008060008060608587031215610fc057610fbf610d4a565b5b600085013567ffffffffffffffff811115610fde57610fdd610d4f565b5b610fea87828801610f50565b94509450506020610ffd87828801610dd3565b925050604061100e87828801610dd3565b91505092959194509250565b6000806000806060858703121561103457611033610d4a565b5b600061104287828801610d9d565b945050602061105387828801610dd3565b935050604085013567ffffffffffffffff81111561107457611073610d4f565b5b61108087828801610f50565b925092505092959194509250565b600082825260208201905092915050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b60006110fb60368361108e565b91506111068261109f565b604082019050919050565b6000602082019050818103600083015261112a816110ee565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061116760118361108e565b915061117282611131565b602082019050919050565b600060208201905081810360008301526111968161115a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006111d782610db2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112095761120861119d565b5b600182019050919050565b600061121f82610db2565b915061122a83610db2565b92508282019050808211156112425761124161119d565b5b92915050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006112a460338361108e565b91506112af82611248565b604082019050919050565b600060208201905081810360008301526112d381611297565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061133660248361108e565b9150611341826112da565b604082019050919050565b6000602082019050818103600083015261136581611329565b9050919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b60006113a260148361108e565b91506113ad8261136c565b602082019050919050565b600060208201905081810360008301526113d181611395565b9050919050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b600061143460368361108e565b915061143f826113d8565b604082019050919050565b6000602082019050818103600083015261146381611427565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611496838561108e565b93506114a383858461146a565b6114ac83611479565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b6114e081610db2565b82525050565b60006114f283836114d7565b60208301905092915050565b6000602082019050919050565b611514816114b7565b61151e81846114c2565b9250611529826114cd565b8060005b8381101561155a57815161154187826114e6565b965061154c836114fe565b92505060018101905061152d565b505050505050565b6000819050919050565b6000819050919050565b600061159161158c61158784611562565b61156c565b610db2565b9050919050565b6115a181611576565b82525050565b600082825260208201905092915050565b50565b60006115c86000836115a7565b91506115d3826115b8565b600082019050919050565b60006101408201905081810360008301526115fa818a8c61148a565b90506116096020830189610e7b565b611616604083018861150b565b611623608083018761150b565b61163060c0830186611598565b61163d60e0830185610eed565b61164b610100830184610eed565b81810361012083015261165d816115bb565b90509998505050505050505050565b60008151905061167b81610dbc565b92915050565b60006020828403121561169757611696610d4a565b5b60006116a58482850161166c565b91505092915050565b60006080820190506116c36000830187610e7b565b6116d06020830186610ed2565b6116dd6040830185610e7b565b6116ea6060830184610eed565b95945050505050565b60006116fe82610db2565b915061170983610db2565b92508282039050818111156117215761172061119d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061176e57607f821691505b60208210810361178157611780611727565b5b50919050565b60008154905061179681611756565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261182e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826117f1565b61183886836117f1565b95508019841693508086168417925050509392505050565b600061186b61186661186184610db2565b61156c565b610db2565b9050919050565b6000819050919050565b61188583611850565b61189961189182611872565b8484546117fe565b825550505050565b600090565b6118ae6118a1565b6118b981848461187c565b505050565b5b818110156118dd576118d26000826118a6565b6001810190506118bf565b5050565b601f821115611922576118f3816117cc565b6118fc846117e1565b8101602085101561190b578190505b61191f611917856117e1565b8301826118be565b50505b505050565b600082821c905092915050565b600061194560001984600802611927565b1980831691505092915050565b600061195e8383611934565b9150826002028217905092915050565b81810361197c575050611a54565b61198582611787565b67ffffffffffffffff81111561199e5761199d61179d565b5b6119a88254611756565b6119b38282856118e1565b6000601f8311600181146119e257600084156119d0578287015490505b6119da8582611952565b865550611a4d565b601f1984166119f0876117cc565b96506119fb866117cc565b60005b82811015611a23578489015482556001820191506001850194506020810190506119fe565b86831015611a405784890154611a3c601f891682611934565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b611a6b8383611a56565b67ffffffffffffffff811115611a8457611a8361179d565b5b611a8e8254611756565b611a998282856118e1565b6000601f831160018114611ac85760008415611ab6578287013590505b611ac08582611952565b865550611b28565b601f198416611ad6866117cc565b60005b82811015611afe57848901358255600182019150602085019450602081019050611ad9565b86831015611b1b5784890135611b17601f891682611934565b8355505b6001600288020188555050505b50505050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611b67601a8361108e565b9150611b7282611b31565b602082019050919050565b60006020820190508181036000830152611b9681611b5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bd782610db2565b9150611be283610db2565b925082611bf257611bf1611b9d565b5b82820690509291505056fea264697066735822122030f2ec404048094849430ab773dd99f12ad2a075efa05bd6af8d0466b56a8de164736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100555760003560e01c8063216ed6ad1461005a578063b5b20c0014610083578063c4a9e116146100ac578063d5a44f86146100d7578063da553ec214610117578063f85c5a8a14610154575b600080fd5b34801561006657600080fd5b50610081600480360381019061007c9190610de8565b610170565b005b34801561008f57600080fd5b506100aa60048036038101906100a59190610e3b565b610310565b005b3480156100b857600080fd5b506100c1610484565b6040516100ce9190610e8a565b60405180910390f35b3480156100e357600080fd5b506100fe60048036038101906100f99190610ea5565b61048a565b60405161010e9493929190610efc565b60405180910390f35b34801561012357600080fd5b5061013e60048036038101906101399190610fa6565b6104e7565b60405161014b9190610e8a565b60405180910390f35b61016e6004803603810190610169919061101a565b610af5565b005b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146101fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f590611111565b60405180910390fd5b60008211610241576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102389061117d565b60405180910390fd5b600060016000815480929190610256906111cc565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426102ca9190611214565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516103019190610e8a565b60405180910390a15050505050565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103af906112ba565b60405180910390fd5b8060030160009054906101000a900460ff161561040a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104019061134c565b60405180910390fd5b806002015442111561042f5781426104229190611214565b8160020181905550610448565b81816002015461043f9190611214565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9836040516104779190610e8a565b60405180910390a1505050565b60015481565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b600060035483111561052e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610525906113b8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461061557600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060b9061144a565b60405180910390fd5b5b600080600090505b600354811015610658576002600082815260200190815260200160002060020154826106499190611214565b9150808060010191505061061d565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c7382888887604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518a63ffffffff1660e01b81526004016106f09897969594939291906115de565b60206040518083038185885af115801561070e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906107339190611681565b915060005b60035481101561082d577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3846002600085815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600260008681526020019081526020016000206001015460016040518563ffffffff1660e01b81526004016107ee94939291906116ae565b600060405180830381600087803b15801561080857600080fd5b505af115801561081c573d6000803e3d6000fd5b505050508080600101915050610738565b50600073ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610950577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b383600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660008060055481526020019081526020016000206001015460016040518563ffffffff1660e01b815260040161091d94939291906116ae565b600060405180830381600087803b15801561093757600080fd5b505af115801561094b573d6000803e3d6000fd5b505050505b600354841015610a5d5760005b8460035461096b91906116f3565b811015610a43576002600082876109829190611214565b8152602001908152602001600020600260008381526020019081526020016000206000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600182015481600101556002820154816002015560038201816003019081610a32919061196e565b50905050808060010191505061095d565b5083600354610a5291906116f3565b600381905550610a66565b60006003819055505b610a6e610b92565b600581905550600080600554815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050949350505050565b60006002600060036000815480929190610b0e906111cc565b9190505581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508381600101819055503481600201819055508282826003019182610b8a929190611a61565b505050505050565b6000610b9c610bd5565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b600154811015610c595760008082815260200190815260200160002060030160009054906101000a900460ff16610c4c57600080828152602001908152602001600020600201544211610c4c576000808281526020019081526020016000206001015482610c499190611214565b91505b8080600101915050610bdb565b5060008111610c9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9490611b7d565b60405180910390fd5b60008144610cab9190611bcc565b9050600080600090505b600154811015610d435760008082815260200190815260200160002060030160009054906101000a900460ff16610d3657600080828152602001908152602001600020600201544211610d36576000808281526020019081526020016000206001015482610d239190611214565b915082821115610d3557809450610d43565b5b8080600101915050610cb5565b5050505090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610d7f82610d54565b9050919050565b610d8f81610d74565b8114610d9a57600080fd5b50565b600081359050610dac81610d86565b92915050565b6000819050919050565b610dc581610db2565b8114610dd057600080fd5b50565b600081359050610de281610dbc565b92915050565b600080600060608486031215610e0157610e00610d4a565b5b6000610e0f86828701610d9d565b9350506020610e2086828701610dd3565b9250506040610e3186828701610dd3565b9150509250925092565b60008060408385031215610e5257610e51610d4a565b5b6000610e6085828601610dd3565b9250506020610e7185828601610dd3565b9150509250929050565b610e8481610db2565b82525050565b6000602082019050610e9f6000830184610e7b565b92915050565b600060208284031215610ebb57610eba610d4a565b5b6000610ec984828501610dd3565b91505092915050565b610edb81610d74565b82525050565b60008115159050919050565b610ef681610ee1565b82525050565b6000608082019050610f116000830187610ed2565b610f1e6020830186610e7b565b610f2b6040830185610e7b565b610f386060830184610eed565b95945050505050565b600080fd5b600080fd5b600080fd5b60008083601f840112610f6657610f65610f41565b5b8235905067ffffffffffffffff811115610f8357610f82610f46565b5b602083019150836001820283011115610f9f57610f9e610f4b565b5b9250929050565b60008060008060608587031215610fc057610fbf610d4a565b5b600085013567ffffffffffffffff811115610fde57610fdd610d4f565b5b610fea87828801610f50565b94509450506020610ffd87828801610dd3565b925050604061100e87828801610dd3565b91505092959194509250565b6000806000806060858703121561103457611033610d4a565b5b600061104287828801610d9d565b945050602061105387828801610dd3565b935050604085013567ffffffffffffffff81111561107457611073610d4f565b5b61108087828801610f50565b925092505092959194509250565b600082825260208201905092915050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b60006110fb60368361108e565b91506111068261109f565b604082019050919050565b6000602082019050818103600083015261112a816110ee565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b600061116760118361108e565b915061117282611131565b602082019050919050565b600060208201905081810360008301526111968161115a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006111d782610db2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112095761120861119d565b5b600182019050919050565b600061121f82610db2565b915061122a83610db2565b92508282019050808211156112425761124161119d565b5b92915050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006112a460338361108e565b91506112af82611248565b604082019050919050565b600060208201905081810360008301526112d381611297565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061133660248361108e565b9150611341826112da565b604082019050919050565b6000602082019050818103600083015261136581611329565b9050919050565b7f42617463682073697a6520746f6f206c61726765000000000000000000000000600082015250565b60006113a260148361108e565b91506113ad8261136c565b602082019050919050565b600060208201905081810360008301526113d181611395565b9050919050565b7f426174636820726573756c74206d757374206265207375626d6974746564206260008201527f792063757272656e7420626174636820776f726b657200000000000000000000602082015250565b600061143460368361108e565b915061143f826113d8565b604082019050919050565b6000602082019050818103600083015261146381611427565b9050919050565b82818337600083830152505050565b6000601f19601f8301169050919050565b6000611496838561108e565b93506114a383858461146a565b6114ac83611479565b840190509392505050565b600060029050919050565b600081905092915050565b6000819050919050565b6114e081610db2565b82525050565b60006114f283836114d7565b60208301905092915050565b6000602082019050919050565b611514816114b7565b61151e81846114c2565b9250611529826114cd565b8060005b8381101561155a57815161154187826114e6565b965061154c836114fe565b92505060018101905061152d565b505050505050565b6000819050919050565b6000819050919050565b600061159161158c61158784611562565b61156c565b610db2565b9050919050565b6115a181611576565b82525050565b600082825260208201905092915050565b50565b60006115c86000836115a7565b91506115d3826115b8565b600082019050919050565b60006101408201905081810360008301526115fa818a8c61148a565b90506116096020830189610e7b565b611616604083018861150b565b611623608083018761150b565b61163060c0830186611598565b61163d60e0830185610eed565b61164b610100830184610eed565b81810361012083015261165d816115bb565b90509998505050505050505050565b60008151905061167b81610dbc565b92915050565b60006020828403121561169757611696610d4a565b5b60006116a58482850161166c565b91505092915050565b60006080820190506116c36000830187610e7b565b6116d06020830186610ed2565b6116dd6040830185610e7b565b6116ea6060830184610eed565b95945050505050565b60006116fe82610db2565b915061170983610db2565b92508282039050818111156117215761172061119d565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061176e57607f821691505b60208210810361178157611780611727565b5b50919050565b60008154905061179681611756565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261182e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826117f1565b61183886836117f1565b95508019841693508086168417925050509392505050565b600061186b61186661186184610db2565b61156c565b610db2565b9050919050565b6000819050919050565b61188583611850565b61189961189182611872565b8484546117fe565b825550505050565b600090565b6118ae6118a1565b6118b981848461187c565b505050565b5b818110156118dd576118d26000826118a6565b6001810190506118bf565b5050565b601f821115611922576118f3816117cc565b6118fc846117e1565b8101602085101561190b578190505b61191f611917856117e1565b8301826118be565b50505b505050565b600082821c905092915050565b600061194560001984600802611927565b1980831691505092915050565b600061195e8383611934565b9150826002028217905092915050565b81810361197c575050611a54565b61198582611787565b67ffffffffffffffff81111561199e5761199d61179d565b5b6119a88254611756565b6119b38282856118e1565b6000601f8311600181146119e257600084156119d0578287015490505b6119da8582611952565b865550611a4d565b601f1984166119f0876117cc565b96506119fb866117cc565b60005b82811015611a23578489015482556001820191506001850194506020810190506119fe565b86831015611a405784890154611a3c601f891682611934565b8355505b6001600288020188555050505b5050505050505b565b600082905092915050565b611a6b8383611a56565b67ffffffffffffffff811115611a8457611a8361179d565b5b611a8e8254611756565b611a998282856118e1565b6000601f831160018114611ac85760008415611ab6578287013590505b611ac08582611952565b865550611b28565b601f198416611ad6866117cc565b60005b82811015611afe57848901358255600182019150602085019450602081019050611ad9565b86831015611b1b5784890135611b17601f891682611934565b8355505b6001600288020188555050505b50505050505050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000611b67601a8361108e565b9150611b7282611b31565b602082019050919050565b60006020820190508181036000830152611b9681611b5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bd782610db2565b9150611be283610db2565b925082611bf257611bf1611b9d565b5b82820690509291505056fea264697066735822122030f2ec404048094849430ab773dd99f12ad2a075efa05bd6af8d0466b56a8de164736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/frontend/contractArtifacts/Work1.json b/frontend/contractArtifacts/Work1.json index ce31551..8e19738 100644 --- a/frontend/contractArtifacts/Work1.json +++ b/frontend/contractArtifacts/Work1.json @@ -249,7 +249,7 @@ }, { "internalType": "string", - "name": "contentId", + "name": "postId", "type": "string" }, { @@ -280,7 +280,7 @@ "inputs": [ { "internalType": "string", - "name": "requestContentId", + "name": "requestPostId", "type": "string" } ], @@ -310,7 +310,7 @@ "type": "uint256" }, { - "internalType": "enum WorkContract.WorkStatus", + "internalType": "enum Work.WorkStatus", "name": "status", "type": "uint8" }, @@ -321,12 +321,12 @@ }, { "internalType": "string", - "name": "requestContentId", + "name": "requestPostId", "type": "string" }, { "internalType": "string", - "name": "evidenceContentId", + "name": "evidencePostId", "type": "string" }, { @@ -412,7 +412,7 @@ }, { "internalType": "string", - "name": "evidenceContentId", + "name": "evidencePostId", "type": "string" }, { @@ -439,8 +439,8 @@ "type": "function" } ], - "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002dd438038062002dd48339818101604052810190620000379190620001c1565b828282828073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505080600181905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050506200021d565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f582620000c8565b9050919050565b60006200010982620000e8565b9050919050565b6200011b81620000fc565b81146200012757600080fd5b50565b6000815190506200013b8162000110565b92915050565b60006200014e82620000e8565b9050919050565b620001608162000141565b81146200016c57600080fd5b50565b600081519050620001808162000155565b92915050565b6000819050919050565b6200019b8162000186565b8114620001a757600080fd5b50565b600081519050620001bb8162000190565b92915050565b600080600060608486031215620001dd57620001dc620000c3565b5b6000620001ed868287016200012a565b935050602062000200868287016200016f565b92505060406200021386828701620001aa565b9150509250925092565b608051612b8d620002476000396000818161093901528181610a090152610aeb0152612b8d6000f3fe6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906113ce565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906114af565b610456565b005b34801561013357600080fd5b5061013c610569565b6040516101499190611511565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611582565b61056f565b6040516101869190611511565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b191906115f6565b6105ee565b6040516101c99796959493929190611754565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f491906117fd565b61077a565b005b6102156004803603810190610210919061185f565b610bab565b005b34801561022357600080fd5b5061022c610cf4565b6040516102399190611511565b60405180910390f35b34801561024e57600080fd5b50610269600480360381019061026491906118d3565b610cfa565b005b34801561027757600080fd5b50610280610e6f565b60405161028d9190611511565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b891906115f6565b610e75565b6040516102cb929190611913565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611992565b610e99565b005b34801561030957600080fd5b50610324600480360381019061031f91906115f6565b6110d2565b6040516103349493929190611a27565b60405180910390f35b34801561034957600080fd5b5061035261112f565b60405161035f9190611511565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611ab8565b60405180910390fd5b6000600760008154809291906103c290611b07565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061043482611135565b8160030181905550838382600401918261044f929190611d95565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611eb1565b60405180910390fd5b6000600560008154809291906104ae90611b07565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611ed1565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a9190611511565b60405180910390a15050505050565b60075481565b600080838381019061058191906115f6565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d8929190611913565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611bb8565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611bb8565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a4611632565b5b8160020160009054906101000a900460ff1660038111156107c9576107c8611632565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611f51565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b611632565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561088a57610889611b5a565b5b6040519080825280602002602001820160405280156108c357816020015b6108b061132f565b8152602001906001900390816108a85790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061092c5761092b611f71565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b815260040161099a9392919061230e565b600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109fd92919061235a565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738560010154866005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610aa49796959493929190612491565b60206040518083038185885af1158015610ac2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ae79190612532565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610b71949392919061255f565b600060405180830381600087803b158015610b8b57600080fd5b505af1158015610b9f573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610bc090611b07565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610c3a9190611511565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610c6a9695949392919061263d565b60206040518083038185885af1158015610c88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cad9190612532565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610ce49190611511565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90612712565b60405180910390fd5b8060030160009054906101000a900460ff1615610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec906127a4565b60405180910390fd5b8060020154421115610e1a578142610e0d9190611ed1565b8160020181905550610e33565b818160020154610e2a9190611ed1565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610e629190611511565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610ec457610ec3611632565b5b8160020160009054906101000a900460ff166003811115610ee857610ee7611632565b5b14610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612810565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc906128a2565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610ffd57610ffc611632565b5b02179055508585836005019182611015929190611d95565b5060005b84849050811015611091578260060185858381811061103b5761103a611f71565b5b905060200281019061104d91906128d1565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816110829190612a7d565b50508080600101915050611019565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516110c19190611511565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061113f6111b4565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516111a6929190611913565b60405180910390a150919050565b60008060005b60055481101561123b576004600082815260200190815260200160002060030160009054906101000a900460ff1661122e576004600082815260200190815260200160002060020154421161122e5760046000828152602001908152602001600020600101548261122b9190611ed1565b91505b80806001019150506111ba565b506000811161127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690612ad7565b60405180910390fd5b6000814461128d9190612b26565b9050600080600090505b600554811015611328576004600082815260200190815260200160002060030160009054906101000a900460ff1661131b576004600082815260200190815260200160002060020154421161131b576004600082815260200190815260200160002060010154826113089190611ed1565b91508282111561131a57809450611328565b5b8080600101915050611297565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261138e5761138d611369565b5b8235905067ffffffffffffffff8111156113ab576113aa61136e565b5b6020830191508360018202830111156113c7576113c6611373565b5b9250929050565b600080602083850312156113e5576113e461135f565b5b600083013567ffffffffffffffff81111561140357611402611364565b5b61140f85828601611378565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114468261141b565b9050919050565b6114568161143b565b811461146157600080fd5b50565b6000813590506114738161144d565b92915050565b6000819050919050565b61148c81611479565b811461149757600080fd5b50565b6000813590506114a981611483565b92915050565b6000806000606084860312156114c8576114c761135f565b5b60006114d686828701611464565b93505060206114e78682870161149a565b92505060406114f88682870161149a565b9150509250925092565b61150b81611479565b82525050565b60006020820190506115266000830184611502565b92915050565b60008083601f84011261154257611541611369565b5b8235905067ffffffffffffffff81111561155f5761155e61136e565b5b60208301915083600182028301111561157b5761157a611373565b5b9250929050565b6000806000806060858703121561159c5761159b61135f565b5b60006115aa8782880161149a565b94505060206115bb8782880161149a565b935050604085013567ffffffffffffffff8111156115dc576115db611364565b5b6115e88782880161152c565b925092505092959194509250565b60006020828403121561160c5761160b61135f565b5b600061161a8482850161149a565b91505092915050565b61162c8161143b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061167257611671611632565b5b50565b600081905061168382611661565b919050565b600061169382611675565b9050919050565b6116a381611688565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116e35780820151818401526020810190506116c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061170b826116a9565b61171581856116b4565b93506117258185602086016116c5565b61172e816116ef565b840191505092915050565b60008115159050919050565b61174e81611739565b82525050565b600060e082019050611769600083018a611623565b6117766020830189611502565b611783604083018861169a565b6117906060830187611502565b81810360808301526117a28186611700565b905081810360a08301526117b68185611700565b90506117c560c0830184611745565b98975050505050505050565b6117da81611739565b81146117e557600080fd5b50565b6000813590506117f7816117d1565b92915050565b600080604083850312156118145761181361135f565b5b60006118228582860161149a565b9250506020611833858286016117e8565b9150509250929050565b60008190508260206003028201111561185957611858611373565b5b92915050565b60008060008060a085870312156118795761187861135f565b5b60006118878782880161149a565b945050602085013567ffffffffffffffff8111156118a8576118a7611364565b5b6118b487828801611378565b935093505060406118c78782880161183d565b91505092959194509250565b600080604083850312156118ea576118e961135f565b5b60006118f88582860161149a565b92505060206119098582860161149a565b9150509250929050565b60006040820190506119286000830185611502565b6119356020830184611502565b9392505050565b60008083601f84011261195257611951611369565b5b8235905067ffffffffffffffff81111561196f5761196e61136e565b5b60208301915083602082028301111561198b5761198a611373565b5b9250929050565b6000806000806000606086880312156119ae576119ad61135f565b5b60006119bc8882890161149a565b955050602086013567ffffffffffffffff8111156119dd576119dc611364565b5b6119e988828901611378565b9450945050604086013567ffffffffffffffff811115611a0c57611a0b611364565b5b611a188882890161193c565b92509250509295509295909350565b6000608082019050611a3c6000830187611623565b611a496020830186611502565b611a566040830185611502565b611a636060830184611745565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611aa26010836116b4565b9150611aad82611a6c565b602082019050919050565b60006020820190508181036000830152611ad181611a95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b1282611479565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b4457611b43611ad8565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bd057607f821691505b602082108103611be357611be2611b89565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c0e565b611c558683611c0e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611c92611c8d611c8884611479565b611c6d565b611479565b9050919050565b6000819050919050565b611cac83611c77565b611cc0611cb882611c99565b848454611c1b565b825550505050565b600090565b611cd5611cc8565b611ce0818484611ca3565b505050565b5b81811015611d0457611cf9600082611ccd565b600181019050611ce6565b5050565b601f821115611d4957611d1a81611be9565b611d2384611bfe565b81016020851015611d32578190505b611d46611d3e85611bfe565b830182611ce5565b50505b505050565b600082821c905092915050565b6000611d6c60001984600802611d4e565b1980831691505092915050565b6000611d858383611d5b565b9150826002028217905092915050565b611d9f8383611b4f565b67ffffffffffffffff811115611db857611db7611b5a565b5b611dc28254611bb8565b611dcd828285611d08565b6000601f831160018114611dfc5760008415611dea578287013590505b611df48582611d79565b865550611e5c565b601f198416611e0a86611be9565b60005b82811015611e3257848901358255600182019150602085019450602081019050611e0d565b86831015611e4f5784890135611e4b601f891682611d5b565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611e9b6011836116b4565b9150611ea682611e65565b602082019050919050565b60006020820190508181036000830152611eca81611e8e565b9050919050565b6000611edc82611479565b9150611ee783611479565b9250828201905080821115611eff57611efe611ad8565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f3b6020836116b4565b9150611f4682611f05565b602082019050919050565b60006020820190508181036000830152611f6a81611f2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611fd581611479565b82525050565b611fe48161143b565b82525050565b6040820160008201516120006000850182611fcc565b5060208201516120136020850182611fdb565b50505050565b60006120258383611fea565b60408301905092915050565b6000602082019050919050565b600061204982611fa0565b6120538185611fab565b935061205e83611fbc565b8060005b8381101561208f5781516120768882612019565b975061208183612031565b925050600181019050612062565b5085935050505092915050565b600081546120a981611bb8565b6120b381866116b4565b945060018216600081146120ce57600181146120e457612117565b60ff198316865281151560200286019350612117565b6120ed85611be9565b60005b8381101561210f578154818901526001820191506020810190506120f0565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061217b61217683612151565b61215e565b9050919050565b6000819050919050565b61219581612182565b82525050565b600082825260208201905092915050565b600081546121b981611bb8565b6121c3818661219b565b945060018216600081146121de57600181146121f457612227565b60ff198316865281151560200286019350612227565b6121fd85611be9565b60005b8381101561221f57815481890152600182019150602081019050612200565b808801955050505b50505092915050565b600060408301600080840154905061224781612168565b612254600087018261218c565b5060018401858303602087015261226b83826121ac565b925050819250505092915050565b60006122858383612230565b905092915050565b6000600282019050919050565b60006122a582612120565b6122af818561212b565b9350836020820285016122c18561213c565b8060005b858110156122fc578484038952816122dd8582612279565b94506122e88361228d565b925060208a019950506001810190506122c5565b50829750879550505050505092915050565b60006060820190508181036000830152612328818661203e565b9050818103602083015261233c818561209c565b90508181036040830152612350818461229a565b9050949350505050565b600060408201905061236f6000830185611502565b61237c6020830184611745565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006123af8383611fcc565b60208301905092915050565b6000602082019050919050565b6123d181612383565b6123db818461238e565b92506123e682612399565b8060005b838110156124175781516123fe87826123a3565b9650612409836123bb565b9250506001810190506123ea565b505050505050565b6000819050919050565b600061244461243f61243a8461241f565b611c6d565b611479565b9050919050565b61245481612429565b82525050565b600082825260208201905092915050565b50565b600061247b60008361245a565b91506124868261246b565b600082019050919050565b60006101408201905081810360008301526124ac818a61209c565b90506124bb6020830189611502565b6124c860408301886123c8565b6124d560808301876123c8565b6124e260c083018661244b565b6124ef60e0830185611745565b6124fd610100830184611745565b81810361012083015261250f8161246e565b905098975050505050505050565b60008151905061252c81611483565b92915050565b6000602082840312156125485761254761135f565b5b60006125568482850161251d565b91505092915050565b60006080820190506125746000830187611502565b6125816020830186611623565b61258e6040830185611502565b61259b6060830184611745565b95945050505050565b82818337600083830152505050565b60006125bf83856116b4565b93506125cc8385846125a4565b6125d5836116ef565b840190509392505050565b82818337505050565b6125f5606083836125e0565b5050565b600081519050919050565b600061260f826125f9565b612619818561245a565b93506126298185602086016116c5565b612632816116ef565b840191505092915050565b600060e082019050818103600083015261265881888a6125b3565b90506126676020830187611623565b61267460408301866125e9565b61268160a0830185611745565b81810360c08301526126938184612604565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006126fc6033836116b4565b9150612707826126a0565b604082019050919050565b6000602082019050818103600083015261272b816126ef565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061278e6024836116b4565b915061279982612732565b604082019050919050565b600060208201905081810360008301526127bd81612781565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006127fa6018836116b4565b9150612805826127c4565b602082019050919050565b60006020820190508181036000830152612829816127ed565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061288c603a836116b4565b915061289782612830565b604082019050919050565b600060208201905081810360008301526128bb8161287f565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126128ed576128ec6128c2565b5b80830191505092915050565b61290281612182565b811461290d57600080fd5b50565b6000813561291d816128f9565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61295f84612926565b9350801983169250808416831791505092915050565b600061299061298b61298684612182565b611c6d565b612182565b9050919050565b6000819050919050565b6129aa82612975565b6129bd6129b682612997565b8354612933565b8255505050565b600080833560016020038436030381126129e1576129e06128c2565b5b80840192508235915067ffffffffffffffff821115612a0357612a026128c7565b5b602083019250600182023603831315612a1f57612a1e6128cc565b5b509250929050565b612a32838383611d95565b505050565b600081016000830180612a4981612910565b9050612a5581846129a1565b5050506001810160208301612a6a81856129c4565b612a75818386612a27565b505050505050565b612a878282612a37565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ac1601a836116b4565b9150612acc82612a8b565b602082019050919050565b60006020820190508181036000830152612af081612ab4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b3182611479565b9150612b3c83611479565b925082612b4c57612b4b612af7565b5b82820690509291505056fea2646970667358221220e255ca2bcc0016bc3f15d92427e9abccdfb8b0123d114dc75d1b0d6b25854eeb64736f6c63430008180033", - "deployedBytecode": "0x6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f791906113ce565b610368565b005b34801561010a57600080fd5b50610125600480360381019061012091906114af565b610456565b005b34801561013357600080fd5b5061013c610569565b6040516101499190611511565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611582565b61056f565b6040516101869190611511565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b191906115f6565b6105ee565b6040516101c99796959493929190611754565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f491906117fd565b61077a565b005b6102156004803603810190610210919061185f565b610bab565b005b34801561022357600080fd5b5061022c610cf4565b6040516102399190611511565b60405180910390f35b34801561024e57600080fd5b50610269600480360381019061026491906118d3565b610cfa565b005b34801561027757600080fd5b50610280610e6f565b60405161028d9190611511565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b891906115f6565b610e75565b6040516102cb929190611913565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611992565b610e99565b005b34801561030957600080fd5b50610324600480360381019061031f91906115f6565b6110d2565b6040516103349493929190611a27565b60405180910390f35b34801561034957600080fd5b5061035261112f565b60405161035f9190611511565b60405180910390f35b6001543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611ab8565b60405180910390fd5b6000600760008154809291906103c290611b07565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034816001018190555061043482611135565b8160030181905550838382600401918261044f929190611d95565b5050505050565b60008211610499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049090611eb1565b60405180910390fd5b6000600560008154809291906104ae90611b07565b9190505590506000600460008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105239190611ed1565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e98260405161055a9190611511565b60405180910390a15050505050565b60075481565b600080838381019061058191906115f6565b9050600060026000838152602001908152602001600020905080600001546001819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826001546040516105d8929190611913565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461065690611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461068290611bb8565b80156106cf5780601f106106a4576101008083540402835291602001916106cf565b820191906000526020600020905b8154815290600101906020018083116106b257829003601f168201915b5050505050908060050180546106e490611bb8565b80601f016020809104026020016040519081016040528092919081815260200182805461071090611bb8565b801561075d5780601f106107325761010080835404028352916020019161075d565b820191906000526020600020905b81548152906001019060200180831161074057829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b6000600660008481526020019081526020016000209050600160038111156107a5576107a4611632565b5b8160020160009054906101000a900460ff1660038111156107c9576107c8611632565b5b14610809576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161080090611f51565b60405180910390fd5b60006004600083600301548152602001908152602001600020905060028260020160006101000a81548160ff0219169083600381111561084c5761084b611632565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561088a57610889611b5a565b5b6040519080825280602002602001820160405280156108c357816020015b6108b061132f565b8152602001906001900390816108a85790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152508160008151811061092c5761092b611f71565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b815260040161099a9392919061230e565b600060405180830381600087803b1580156109b457600080fd5b505af11580156109c8573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc85856040516109fd92919061235a565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738560010154866005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610aa49796959493929190612491565b60206040518083038185885af1158015610ac2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ae79190612532565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610b71949392919061255f565b600060405180830381600087803b158015610b8b57600080fd5b505af1158015610b9f573d6000803e3d6000fd5b50505050505050505050565b600060036000815480929190610bc090611b07565b919050559050600060026000838152602001908152602001600020905085816000018190555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632805b5d93487873388600189604051602001610c3a9190611511565b6040516020818303038152906040526040518863ffffffff1660e01b8152600401610c6a9695949392919061263d565b60206040518083038185885af1158015610c88573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610cad9190612532565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610ce49190611511565b60405180910390a1505050505050565b60015481565b60006004600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610da3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9a90612712565b60405180910390fd5b8060030160009054906101000a900460ff1615610df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dec906127a4565b60405180910390fd5b8060020154421115610e1a578142610e0d9190611ed1565b8160020181905550610e33565b818160020154610e2a9190611ed1565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610e629190611511565b60405180910390a1505050565b60055481565b60026020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610ec457610ec3611632565b5b8160020160009054906101000a900460ff166003811115610ee857610ee7611632565b5b14610f28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1f90612810565b60405180910390fd5b6000600460008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc906128a2565b60405180910390fd5b60018260020160006101000a81548160ff02191690836003811115610ffd57610ffc611632565b5b02179055508585836005019182611015929190611d95565b5060005b84849050811015611091578260060185858381811061103b5761103a611f71565b5b905060200281019061104d91906128d1565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816110829190612a7d565b50508080600101915050611019565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516110c19190611511565b60405180910390a150505050505050565b60046020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60035481565b600061113f6111b4565b9050600060046000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b483836040516111a6929190611913565b60405180910390a150919050565b60008060005b60055481101561123b576004600082815260200190815260200160002060030160009054906101000a900460ff1661122e576004600082815260200190815260200160002060020154421161122e5760046000828152602001908152602001600020600101548261122b9190611ed1565b91505b80806001019150506111ba565b506000811161127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690612ad7565b60405180910390fd5b6000814461128d9190612b26565b9050600080600090505b600554811015611328576004600082815260200190815260200160002060030160009054906101000a900460ff1661131b576004600082815260200190815260200160002060020154421161131b576004600082815260200190815260200160002060010154826113089190611ed1565b91508282111561131a57809450611328565b5b8080600101915050611297565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f84011261138e5761138d611369565b5b8235905067ffffffffffffffff8111156113ab576113aa61136e565b5b6020830191508360018202830111156113c7576113c6611373565b5b9250929050565b600080602083850312156113e5576113e461135f565b5b600083013567ffffffffffffffff81111561140357611402611364565b5b61140f85828601611378565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114468261141b565b9050919050565b6114568161143b565b811461146157600080fd5b50565b6000813590506114738161144d565b92915050565b6000819050919050565b61148c81611479565b811461149757600080fd5b50565b6000813590506114a981611483565b92915050565b6000806000606084860312156114c8576114c761135f565b5b60006114d686828701611464565b93505060206114e78682870161149a565b92505060406114f88682870161149a565b9150509250925092565b61150b81611479565b82525050565b60006020820190506115266000830184611502565b92915050565b60008083601f84011261154257611541611369565b5b8235905067ffffffffffffffff81111561155f5761155e61136e565b5b60208301915083600182028301111561157b5761157a611373565b5b9250929050565b6000806000806060858703121561159c5761159b61135f565b5b60006115aa8782880161149a565b94505060206115bb8782880161149a565b935050604085013567ffffffffffffffff8111156115dc576115db611364565b5b6115e88782880161152c565b925092505092959194509250565b60006020828403121561160c5761160b61135f565b5b600061161a8482850161149a565b91505092915050565b61162c8161143b565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6004811061167257611671611632565b5b50565b600081905061168382611661565b919050565b600061169382611675565b9050919050565b6116a381611688565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116e35780820151818401526020810190506116c8565b60008484015250505050565b6000601f19601f8301169050919050565b600061170b826116a9565b61171581856116b4565b93506117258185602086016116c5565b61172e816116ef565b840191505092915050565b60008115159050919050565b61174e81611739565b82525050565b600060e082019050611769600083018a611623565b6117766020830189611502565b611783604083018861169a565b6117906060830187611502565b81810360808301526117a28186611700565b905081810360a08301526117b68185611700565b90506117c560c0830184611745565b98975050505050505050565b6117da81611739565b81146117e557600080fd5b50565b6000813590506117f7816117d1565b92915050565b600080604083850312156118145761181361135f565b5b60006118228582860161149a565b9250506020611833858286016117e8565b9150509250929050565b60008190508260206003028201111561185957611858611373565b5b92915050565b60008060008060a085870312156118795761187861135f565b5b60006118878782880161149a565b945050602085013567ffffffffffffffff8111156118a8576118a7611364565b5b6118b487828801611378565b935093505060406118c78782880161183d565b91505092959194509250565b600080604083850312156118ea576118e961135f565b5b60006118f88582860161149a565b92505060206119098582860161149a565b9150509250929050565b60006040820190506119286000830185611502565b6119356020830184611502565b9392505050565b60008083601f84011261195257611951611369565b5b8235905067ffffffffffffffff81111561196f5761196e61136e565b5b60208301915083602082028301111561198b5761198a611373565b5b9250929050565b6000806000806000606086880312156119ae576119ad61135f565b5b60006119bc8882890161149a565b955050602086013567ffffffffffffffff8111156119dd576119dc611364565b5b6119e988828901611378565b9450945050604086013567ffffffffffffffff811115611a0c57611a0b611364565b5b611a188882890161193c565b92509250509295509295909350565b6000608082019050611a3c6000830187611623565b611a496020830186611502565b611a566040830185611502565b611a636060830184611745565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611aa26010836116b4565b9150611aad82611a6c565b602082019050919050565b60006020820190508181036000830152611ad181611a95565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b1282611479565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611b4457611b43611ad8565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611bd057607f821691505b602082108103611be357611be2611b89565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611c4b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c0e565b611c558683611c0e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611c92611c8d611c8884611479565b611c6d565b611479565b9050919050565b6000819050919050565b611cac83611c77565b611cc0611cb882611c99565b848454611c1b565b825550505050565b600090565b611cd5611cc8565b611ce0818484611ca3565b505050565b5b81811015611d0457611cf9600082611ccd565b600181019050611ce6565b5050565b601f821115611d4957611d1a81611be9565b611d2384611bfe565b81016020851015611d32578190505b611d46611d3e85611bfe565b830182611ce5565b50505b505050565b600082821c905092915050565b6000611d6c60001984600802611d4e565b1980831691505092915050565b6000611d858383611d5b565b9150826002028217905092915050565b611d9f8383611b4f565b67ffffffffffffffff811115611db857611db7611b5a565b5b611dc28254611bb8565b611dcd828285611d08565b6000601f831160018114611dfc5760008415611dea578287013590505b611df48582611d79565b865550611e5c565b601f198416611e0a86611be9565b60005b82811015611e3257848901358255600182019150602085019450602081019050611e0d565b86831015611e4f5784890135611e4b601f891682611d5b565b8355505b6001600288020188555050505b50505050505050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611e9b6011836116b4565b9150611ea682611e65565b602082019050919050565b60006020820190508181036000830152611eca81611e8e565b9050919050565b6000611edc82611479565b9150611ee783611479565b9250828201905080821115611eff57611efe611ad8565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000611f3b6020836116b4565b9150611f4682611f05565b602082019050919050565b60006020820190508181036000830152611f6a81611f2e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611fd581611479565b82525050565b611fe48161143b565b82525050565b6040820160008201516120006000850182611fcc565b5060208201516120136020850182611fdb565b50505050565b60006120258383611fea565b60408301905092915050565b6000602082019050919050565b600061204982611fa0565b6120538185611fab565b935061205e83611fbc565b8060005b8381101561208f5781516120768882612019565b975061208183612031565b925050600181019050612062565b5085935050505092915050565b600081546120a981611bb8565b6120b381866116b4565b945060018216600081146120ce57600181146120e457612117565b60ff198316865281151560200286019350612117565b6120ed85611be9565b60005b8381101561210f578154818901526001820191506020810190506120f0565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061217b61217683612151565b61215e565b9050919050565b6000819050919050565b61219581612182565b82525050565b600082825260208201905092915050565b600081546121b981611bb8565b6121c3818661219b565b945060018216600081146121de57600181146121f457612227565b60ff198316865281151560200286019350612227565b6121fd85611be9565b60005b8381101561221f57815481890152600182019150602081019050612200565b808801955050505b50505092915050565b600060408301600080840154905061224781612168565b612254600087018261218c565b5060018401858303602087015261226b83826121ac565b925050819250505092915050565b60006122858383612230565b905092915050565b6000600282019050919050565b60006122a582612120565b6122af818561212b565b9350836020820285016122c18561213c565b8060005b858110156122fc578484038952816122dd8582612279565b94506122e88361228d565b925060208a019950506001810190506122c5565b50829750879550505050505092915050565b60006060820190508181036000830152612328818661203e565b9050818103602083015261233c818561209c565b90508181036040830152612350818461229a565b9050949350505050565b600060408201905061236f6000830185611502565b61237c6020830184611745565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006123af8383611fcc565b60208301905092915050565b6000602082019050919050565b6123d181612383565b6123db818461238e565b92506123e682612399565b8060005b838110156124175781516123fe87826123a3565b9650612409836123bb565b9250506001810190506123ea565b505050505050565b6000819050919050565b600061244461243f61243a8461241f565b611c6d565b611479565b9050919050565b61245481612429565b82525050565b600082825260208201905092915050565b50565b600061247b60008361245a565b91506124868261246b565b600082019050919050565b60006101408201905081810360008301526124ac818a61209c565b90506124bb6020830189611502565b6124c860408301886123c8565b6124d560808301876123c8565b6124e260c083018661244b565b6124ef60e0830185611745565b6124fd610100830184611745565b81810361012083015261250f8161246e565b905098975050505050505050565b60008151905061252c81611483565b92915050565b6000602082840312156125485761254761135f565b5b60006125568482850161251d565b91505092915050565b60006080820190506125746000830187611502565b6125816020830186611623565b61258e6040830185611502565b61259b6060830184611745565b95945050505050565b82818337600083830152505050565b60006125bf83856116b4565b93506125cc8385846125a4565b6125d5836116ef565b840190509392505050565b82818337505050565b6125f5606083836125e0565b5050565b600081519050919050565b600061260f826125f9565b612619818561245a565b93506126298185602086016116c5565b612632816116ef565b840191505092915050565b600060e082019050818103600083015261265881888a6125b3565b90506126676020830187611623565b61267460408301866125e9565b61268160a0830185611745565b81810360c08301526126938184612604565b9050979650505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006126fc6033836116b4565b9150612707826126a0565b604082019050919050565b6000602082019050818103600083015261272b816126ef565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061278e6024836116b4565b915061279982612732565b604082019050919050565b600060208201905081810360008301526127bd81612781565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006127fa6018836116b4565b9150612805826127c4565b602082019050919050565b60006020820190508181036000830152612829816127ed565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b600061288c603a836116b4565b915061289782612830565b604082019050919050565b600060208201905081810360008301526128bb8161287f565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126128ed576128ec6128c2565b5b80830191505092915050565b61290281612182565b811461290d57600080fd5b50565b6000813561291d816128f9565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61295f84612926565b9350801983169250808416831791505092915050565b600061299061298b61298684612182565b611c6d565b612182565b9050919050565b6000819050919050565b6129aa82612975565b6129bd6129b682612997565b8354612933565b8255505050565b600080833560016020038436030381126129e1576129e06128c2565b5b80840192508235915067ffffffffffffffff821115612a0357612a026128c7565b5b602083019250600182023603831315612a1f57612a1e6128cc565b5b509250929050565b612a32838383611d95565b505050565b600081016000830180612a4981612910565b9050612a5581846129a1565b5050506001810160208301612a6a81856129c4565b612a75818386612a27565b505050505050565b612a878282612a37565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612ac1601a836116b4565b9150612acc82612a8b565b602082019050919050565b60006020820190508181036000830152612af081612ab4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b3182611479565b9150612b3c83611479565b925082612b4c57612b4b612af7565b5b82820690509291505056fea2646970667358221220e255ca2bcc0016bc3f15d92427e9abccdfb8b0123d114dc75d1b0d6b25854eeb64736f6c63430008180033", + "bytecode": "0x60a06040523480156200001157600080fd5b5060405162002ee638038062002ee68339818101604052810190620000379190620001c4565b82828282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060038190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050505062000220565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620000f882620000cb565b9050919050565b60006200010c82620000eb565b9050919050565b6200011e81620000ff565b81146200012a57600080fd5b50565b6000815190506200013e8162000113565b92915050565b60006200015182620000eb565b9050919050565b620001638162000144565b81146200016f57600080fd5b50565b600081519050620001838162000158565b92915050565b6000819050919050565b6200019e8162000189565b8114620001aa57600080fd5b50565b600081519050620001be8162000193565b92915050565b600080600060608486031215620001e057620001df620000c6565b5b6000620001f0868287016200012d565b9350506020620002038682870162000172565b92505060406200021686828701620001ad565b9150509250925092565b608051612c95620002516000396000818161049401528181610a0101528181610ad10152610bb30152612c956000f3fe6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f79190611452565b610368565b005b34801561010a57600080fd5b5061012560048036038101906101209190611533565b610492565b005b34801561013357600080fd5b5061013c610632565b6040516101499190611595565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611606565b610638565b6040516101869190611595565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b1919061167a565b6106b7565b6040516101c997969594939291906117d8565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611881565b610843565b005b610215600480360381019061021091906118e3565b610c73565b005b34801561022357600080fd5b5061022c610dbc565b6040516102399190611595565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190611957565b610dc2565b005b34801561027757600080fd5b50610280610f36565b60405161028d9190611595565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b8919061167a565b610f3c565b6040516102cb929190611997565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611a16565b610f60565b005b34801561030957600080fd5b50610324600480360381019061031f919061167a565b611198565b6040516103349493929190611aab565b60405180910390f35b34801561034957600080fd5b506103526111f5565b60405161035f9190611595565b60405180910390f35b6003543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611b3c565b60405180910390fd5b6000600760008154809291906103c290611b8b565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104336111fb565b8160030181905550838382600401918261044e929190611e19565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610484929190611997565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051790611f5b565b60405180910390fd5b60008211610563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055a90611fc7565b60405180910390fd5b60006001600081548092919061057890611b8b565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105ec9190611fe7565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516106239190611595565b60405180910390a15050505050565b60075481565b600080838381019061064a919061167a565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106a1929190611997565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461071f90611c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461074b90611c3c565b80156107985780601f1061076d57610100808354040283529160200191610798565b820191906000526020600020905b81548152906001019060200180831161077b57829003601f168201915b5050505050908060050180546107ad90611c3c565b80601f01602080910402602001604051908101604052809291908181526020018280546107d990611c3c565b80156108265780601f106107fb57610100808354040283529160200191610826565b820191906000526020600020905b81548152906001019060200180831161080957829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b60006006600084815260200190815260200160002090506001600381111561086e5761086d6116b6565b5b8160020160009054906101000a900460ff166003811115610892576108916116b6565b5b146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990612067565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610914576109136116b6565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561095257610951611bde565b5b60405190808252806020026020018201604052801561098b57816020015b6109786113b3565b8152602001906001900390816109705790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250816000815181106109f4576109f3612087565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610a6293929190612424565b600060405180830381600087803b158015610a7c57600080fd5b505af1158015610a90573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ac5929190612470565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738560010154866005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610b6c97969594939291906125a7565b60206040518083038185885af1158015610b8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610baf9190612648565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610c399493929190612675565b600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610c8890611b8b565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610d039190611595565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610d32959493929190612753565b60206040518083038185885af1158015610d50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d759190612648565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610dac9190611595565b60405180910390a1505050505050565b60035481565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e619061281a565b60405180910390fd5b8060030160009054906101000a900460ff1615610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906128ac565b60405180910390fd5b8060020154421115610ee1578142610ed49190611fe7565b8160020181905550610efa565b818160020154610ef19190611fe7565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f299190611595565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610f8b57610f8a6116b6565b5b8160020160009054906101000a900460ff166003811115610faf57610fae6116b6565b5b14610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690612918565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611092906129aa565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110c3576110c26116b6565b5b021790555085858360050191826110db929190611e19565b5060005b84849050811015611157578260060185858381811061110157611100612087565b5b905060200281019061111391906129d9565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816111489190612b85565b505080806001019150506110df565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111879190611595565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b600061120561123e565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156112c25760008082815260200190815260200160002060030160009054906101000a900460ff166112b5576000808281526020019081526020016000206002015442116112b55760008082815260200190815260200160002060010154826112b29190611fe7565b91505b8080600101915050611244565b5060008111611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90612bdf565b60405180910390fd5b600081446113149190612c2e565b9050600080600090505b6001548110156113ac5760008082815260200190815260200160002060030160009054906101000a900460ff1661139f5760008082815260200190815260200160002060020154421161139f57600080828152602001908152602001600020600101548261138c9190611fe7565b91508282111561139e578094506113ac565b5b808060010191505061131e565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611412576114116113ed565b5b8235905067ffffffffffffffff81111561142f5761142e6113f2565b5b60208301915083600182028301111561144b5761144a6113f7565b5b9250929050565b60008060208385031215611469576114686113e3565b5b600083013567ffffffffffffffff811115611487576114866113e8565b5b611493858286016113fc565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114ca8261149f565b9050919050565b6114da816114bf565b81146114e557600080fd5b50565b6000813590506114f7816114d1565b92915050565b6000819050919050565b611510816114fd565b811461151b57600080fd5b50565b60008135905061152d81611507565b92915050565b60008060006060848603121561154c5761154b6113e3565b5b600061155a868287016114e8565b935050602061156b8682870161151e565b925050604061157c8682870161151e565b9150509250925092565b61158f816114fd565b82525050565b60006020820190506115aa6000830184611586565b92915050565b60008083601f8401126115c6576115c56113ed565b5b8235905067ffffffffffffffff8111156115e3576115e26113f2565b5b6020830191508360018202830111156115ff576115fe6113f7565b5b9250929050565b600080600080606085870312156116205761161f6113e3565b5b600061162e8782880161151e565b945050602061163f8782880161151e565b935050604085013567ffffffffffffffff8111156116605761165f6113e8565b5b61166c878288016115b0565b925092505092959194509250565b6000602082840312156116905761168f6113e3565b5b600061169e8482850161151e565b91505092915050565b6116b0816114bf565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f6576116f56116b6565b5b50565b6000819050611707826116e5565b919050565b6000611717826116f9565b9050919050565b6117278161170c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561176757808201518184015260208101905061174c565b60008484015250505050565b6000601f19601f8301169050919050565b600061178f8261172d565b6117998185611738565b93506117a9818560208601611749565b6117b281611773565b840191505092915050565b60008115159050919050565b6117d2816117bd565b82525050565b600060e0820190506117ed600083018a6116a7565b6117fa6020830189611586565b611807604083018861171e565b6118146060830187611586565b81810360808301526118268186611784565b905081810360a083015261183a8185611784565b905061184960c08301846117c9565b98975050505050505050565b61185e816117bd565b811461186957600080fd5b50565b60008135905061187b81611855565b92915050565b60008060408385031215611898576118976113e3565b5b60006118a68582860161151e565b92505060206118b78582860161186c565b9150509250929050565b6000819050826020600302820111156118dd576118dc6113f7565b5b92915050565b60008060008060a085870312156118fd576118fc6113e3565b5b600061190b8782880161151e565b945050602085013567ffffffffffffffff81111561192c5761192b6113e8565b5b611938878288016113fc565b9350935050604061194b878288016118c1565b91505092959194509250565b6000806040838503121561196e5761196d6113e3565b5b600061197c8582860161151e565b925050602061198d8582860161151e565b9150509250929050565b60006040820190506119ac6000830185611586565b6119b96020830184611586565b9392505050565b60008083601f8401126119d6576119d56113ed565b5b8235905067ffffffffffffffff8111156119f3576119f26113f2565b5b602083019150836020820283011115611a0f57611a0e6113f7565b5b9250929050565b600080600080600060608688031215611a3257611a316113e3565b5b6000611a408882890161151e565b955050602086013567ffffffffffffffff811115611a6157611a606113e8565b5b611a6d888289016113fc565b9450945050604086013567ffffffffffffffff811115611a9057611a8f6113e8565b5b611a9c888289016119c0565b92509250509295509295909350565b6000608082019050611ac060008301876116a7565b611acd6020830186611586565b611ada6040830185611586565b611ae760608301846117c9565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b26601083611738565b9150611b3182611af0565b602082019050919050565b60006020820190508181036000830152611b5581611b19565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b96826114fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bc857611bc7611b5c565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c5457607f821691505b602082108103611c6757611c66611c0d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c92565b611cd98683611c92565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d16611d11611d0c846114fd565b611cf1565b6114fd565b9050919050565b6000819050919050565b611d3083611cfb565b611d44611d3c82611d1d565b848454611c9f565b825550505050565b600090565b611d59611d4c565b611d64818484611d27565b505050565b5b81811015611d8857611d7d600082611d51565b600181019050611d6a565b5050565b601f821115611dcd57611d9e81611c6d565b611da784611c82565b81016020851015611db6578190505b611dca611dc285611c82565b830182611d69565b50505b505050565b600082821c905092915050565b6000611df060001984600802611dd2565b1980831691505092915050565b6000611e098383611ddf565b9150826002028217905092915050565b611e238383611bd3565b67ffffffffffffffff811115611e3c57611e3b611bde565b5b611e468254611c3c565b611e51828285611d8c565b6000601f831160018114611e805760008415611e6e578287013590505b611e788582611dfd565b865550611ee0565b601f198416611e8e86611c6d565b60005b82811015611eb657848901358255600182019150602085019450602081019050611e91565b86831015611ed35784890135611ecf601f891682611ddf565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f45603683611738565b9150611f5082611ee9565b604082019050919050565b60006020820190508181036000830152611f7481611f38565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fb1601183611738565b9150611fbc82611f7b565b602082019050919050565b60006020820190508181036000830152611fe081611fa4565b9050919050565b6000611ff2826114fd565b9150611ffd836114fd565b925082820190508082111561201557612014611b5c565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612051602083611738565b915061205c8261201b565b602082019050919050565b6000602082019050818103600083015261208081612044565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120eb816114fd565b82525050565b6120fa816114bf565b82525050565b60408201600082015161211660008501826120e2565b50602082015161212960208501826120f1565b50505050565b600061213b8383612100565b60408301905092915050565b6000602082019050919050565b600061215f826120b6565b61216981856120c1565b9350612174836120d2565b8060005b838110156121a557815161218c888261212f565b975061219783612147565b925050600181019050612178565b5085935050505092915050565b600081546121bf81611c3c565b6121c98186611738565b945060018216600081146121e457600181146121fa5761222d565b60ff19831686528115156020028601935061222d565b61220385611c6d565b60005b8381101561222557815481890152600182019150602081019050612206565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061229161228c83612267565b612274565b9050919050565b6000819050919050565b6122ab81612298565b82525050565b600082825260208201905092915050565b600081546122cf81611c3c565b6122d981866122b1565b945060018216600081146122f4576001811461230a5761233d565b60ff19831686528115156020028601935061233d565b61231385611c6d565b60005b8381101561233557815481890152600182019150602081019050612316565b808801955050505b50505092915050565b600060408301600080840154905061235d8161227e565b61236a60008701826122a2565b5060018401858303602087015261238183826122c2565b925050819250505092915050565b600061239b8383612346565b905092915050565b6000600282019050919050565b60006123bb82612236565b6123c58185612241565b9350836020820285016123d785612252565b8060005b85811015612412578484038952816123f3858261238f565b94506123fe836123a3565b925060208a019950506001810190506123db565b50829750879550505050505092915050565b6000606082019050818103600083015261243e8186612154565b9050818103602083015261245281856121b2565b9050818103604083015261246681846123b0565b9050949350505050565b60006040820190506124856000830185611586565b61249260208301846117c9565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006124c583836120e2565b60208301905092915050565b6000602082019050919050565b6124e781612499565b6124f181846124a4565b92506124fc826124af565b8060005b8381101561252d57815161251487826124b9565b965061251f836124d1565b925050600181019050612500565b505050505050565b6000819050919050565b600061255a61255561255084612535565b611cf1565b6114fd565b9050919050565b61256a8161253f565b82525050565b600082825260208201905092915050565b50565b6000612591600083612570565b915061259c82612581565b600082019050919050565b60006101408201905081810360008301526125c2818a6121b2565b90506125d16020830189611586565b6125de60408301886124de565b6125eb60808301876124de565b6125f860c0830186612561565b61260560e08301856117c9565b6126136101008301846117c9565b81810361012083015261262581612584565b905098975050505050505050565b60008151905061264281611507565b92915050565b60006020828403121561265e5761265d6113e3565b5b600061266c84828501612633565b91505092915050565b600060808201905061268a6000830187611586565b61269760208301866116a7565b6126a46040830185611586565b6126b160608301846117c9565b95945050505050565b82818337600083830152505050565b60006126d58385611738565b93506126e28385846126ba565b6126eb83611773565b840190509392505050565b82818337505050565b61270b606083836126f6565b5050565b600081519050919050565b60006127258261270f565b61272f8185612570565b935061273f818560208601611749565b61274881611773565b840191505092915050565b600060c082019050818103600083015261276e8187896126c9565b905061277d60208301866126ff565b61278a60808301856117c9565b81810360a083015261279c818461271a565b90509695505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612804603383611738565b915061280f826127a8565b604082019050919050565b60006020820190508181036000830152612833816127f7565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612896602483611738565b91506128a18261283a565b604082019050919050565b600060208201905081810360008301526128c581612889565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612902601883611738565b915061290d826128cc565b602082019050919050565b60006020820190508181036000830152612931816128f5565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612994603a83611738565b915061299f82612938565b604082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126129f5576129f46129ca565b5b80830191505092915050565b612a0a81612298565b8114612a1557600080fd5b50565b60008135612a2581612a01565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a6784612a2e565b9350801983169250808416831791505092915050565b6000612a98612a93612a8e84612298565b611cf1565b612298565b9050919050565b6000819050919050565b612ab282612a7d565b612ac5612abe82612a9f565b8354612a3b565b8255505050565b60008083356001602003843603038112612ae957612ae86129ca565b5b80840192508235915067ffffffffffffffff821115612b0b57612b0a6129cf565b5b602083019250600182023603831315612b2757612b266129d4565b5b509250929050565b612b3a838383611e19565b505050565b600081016000830180612b5181612a18565b9050612b5d8184612aa9565b5050506001810160208301612b728185612acc565b612b7d818386612b2f565b505050505050565b612b8f8282612b3f565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612bc9601a83611738565b9150612bd482612b93565b602082019050919050565b60006020820190508181036000830152612bf881612bbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c39826114fd565b9150612c44836114fd565b925082612c5457612c53612bff565b5b82820690509291505056fea264697066735822122020fad91210d3da55e5cb9d07b93dd5b6e548f7d12913fc4c85a5d427600c06dd64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f79190611452565b610368565b005b34801561010a57600080fd5b5061012560048036038101906101209190611533565b610492565b005b34801561013357600080fd5b5061013c610632565b6040516101499190611595565b60405180910390f35b34801561015e57600080fd5b5061017960048036038101906101749190611606565b610638565b6040516101869190611595565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b1919061167a565b6106b7565b6040516101c997969594939291906117d8565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611881565b610843565b005b610215600480360381019061021091906118e3565b610c73565b005b34801561022357600080fd5b5061022c610dbc565b6040516102399190611595565b60405180910390f35b34801561024e57600080fd5b5061026960048036038101906102649190611957565b610dc2565b005b34801561027757600080fd5b50610280610f36565b60405161028d9190611595565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b8919061167a565b610f3c565b6040516102cb929190611997565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611a16565b610f60565b005b34801561030957600080fd5b50610324600480360381019061031f919061167a565b611198565b6040516103349493929190611aab565b60405180910390f35b34801561034957600080fd5b506103526111f5565b60405161035f9190611595565b60405180910390f35b6003543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611b3c565b60405180910390fd5b6000600760008154809291906103c290611b8b565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104336111fb565b8160030181905550838382600401918261044e929190611e19565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b4828260030154604051610484929190611997565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051790611f5b565b60405180910390fd5b60008211610563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055a90611fc7565b60405180910390fd5b60006001600081548092919061057890611b8b565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105ec9190611fe7565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e9826040516106239190611595565b60405180910390a15050505050565b60075481565b600080838381019061064a919061167a565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106a1929190611997565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461071f90611c3c565b80601f016020809104026020016040519081016040528092919081815260200182805461074b90611c3c565b80156107985780601f1061076d57610100808354040283529160200191610798565b820191906000526020600020905b81548152906001019060200180831161077b57829003601f168201915b5050505050908060050180546107ad90611c3c565b80601f01602080910402602001604051908101604052809291908181526020018280546107d990611c3c565b80156108265780601f106107fb57610100808354040283529160200191610826565b820191906000526020600020905b81548152906001019060200180831161080957829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b60006006600084815260200190815260200160002090506001600381111561086e5761086d6116b6565b5b8160020160009054906101000a900460ff166003811115610892576108916116b6565b5b146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c990612067565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610914576109136116b6565b5b0217905550828260070160006101000a81548160ff0219169083151502179055506000600167ffffffffffffffff81111561095257610951611bde565b5b60405190808252806020026020018201604052801561098b57816020015b6109786113b3565b8152602001906001900390816109705790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250816000815181106109f4576109f3612087565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610a6293929190612424565b600060405180830381600087803b158015610a7c57600080fd5b505af1158015610a90573d6000803e3d6000fd5b505050507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc8585604051610ac5929190612470565b60405180910390a160007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16639fbe7c738560010154866005016014604051806040016040528060018152602001600381525060405180604001604052806001815260200160028152506064600160006040518963ffffffff1660e01b8152600401610b6c97969594939291906125a7565b60206040518083038185885af1158015610b8a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610baf9190612648565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663975762b3828560000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866001015460016040518563ffffffff1660e01b8152600401610c399493929190612675565b600060405180830381600087803b158015610c5357600080fd5b505af1158015610c67573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610c8890611b8b565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610d039190611595565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610d32959493929190612753565b60206040518083038185885af1158015610d50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d759190612648565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610dac9190611595565b60405180910390a1505050505050565b60035481565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e619061281a565b60405180910390fd5b8060030160009054906101000a900460ff1615610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb3906128ac565b60405180910390fd5b8060020154421115610ee1578142610ed49190611fe7565b8160020181905550610efa565b818160020154610ef19190611fe7565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f299190611595565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610f8b57610f8a6116b6565b5b8160020160009054906101000a900460ff166003811115610faf57610fae6116b6565b5b14610fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe690612918565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461109b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611092906129aa565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110c3576110c26116b6565b5b021790555085858360050191826110db929190611e19565b5060005b84849050811015611157578260060185858381811061110157611100612087565b5b905060200281019061111391906129d9565b908060018154018082558091505060019003906000526020600020906002020160009091909190915081816111489190612b85565b505080806001019150506110df565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc876040516111879190611595565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b600061120561123e565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156112c25760008082815260200190815260200160002060030160009054906101000a900460ff166112b5576000808281526020019081526020016000206002015442116112b55760008082815260200190815260200160002060010154826112b29190611fe7565b91505b8080600101915050611244565b5060008111611306576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fd90612bdf565b60405180910390fd5b600081446113149190612c2e565b9050600080600090505b6001548110156113ac5760008082815260200190815260200160002060030160009054906101000a900460ff1661139f5760008082815260200190815260200160002060020154421161139f57600080828152602001908152602001600020600101548261138c9190611fe7565b91508282111561139e578094506113ac565b5b808060010191505061131e565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611412576114116113ed565b5b8235905067ffffffffffffffff81111561142f5761142e6113f2565b5b60208301915083600182028301111561144b5761144a6113f7565b5b9250929050565b60008060208385031215611469576114686113e3565b5b600083013567ffffffffffffffff811115611487576114866113e8565b5b611493858286016113fc565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114ca8261149f565b9050919050565b6114da816114bf565b81146114e557600080fd5b50565b6000813590506114f7816114d1565b92915050565b6000819050919050565b611510816114fd565b811461151b57600080fd5b50565b60008135905061152d81611507565b92915050565b60008060006060848603121561154c5761154b6113e3565b5b600061155a868287016114e8565b935050602061156b8682870161151e565b925050604061157c8682870161151e565b9150509250925092565b61158f816114fd565b82525050565b60006020820190506115aa6000830184611586565b92915050565b60008083601f8401126115c6576115c56113ed565b5b8235905067ffffffffffffffff8111156115e3576115e26113f2565b5b6020830191508360018202830111156115ff576115fe6113f7565b5b9250929050565b600080600080606085870312156116205761161f6113e3565b5b600061162e8782880161151e565b945050602061163f8782880161151e565b935050604085013567ffffffffffffffff8111156116605761165f6113e8565b5b61166c878288016115b0565b925092505092959194509250565b6000602082840312156116905761168f6113e3565b5b600061169e8482850161151e565b91505092915050565b6116b0816114bf565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116f6576116f56116b6565b5b50565b6000819050611707826116e5565b919050565b6000611717826116f9565b9050919050565b6117278161170c565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561176757808201518184015260208101905061174c565b60008484015250505050565b6000601f19601f8301169050919050565b600061178f8261172d565b6117998185611738565b93506117a9818560208601611749565b6117b281611773565b840191505092915050565b60008115159050919050565b6117d2816117bd565b82525050565b600060e0820190506117ed600083018a6116a7565b6117fa6020830189611586565b611807604083018861171e565b6118146060830187611586565b81810360808301526118268186611784565b905081810360a083015261183a8185611784565b905061184960c08301846117c9565b98975050505050505050565b61185e816117bd565b811461186957600080fd5b50565b60008135905061187b81611855565b92915050565b60008060408385031215611898576118976113e3565b5b60006118a68582860161151e565b92505060206118b78582860161186c565b9150509250929050565b6000819050826020600302820111156118dd576118dc6113f7565b5b92915050565b60008060008060a085870312156118fd576118fc6113e3565b5b600061190b8782880161151e565b945050602085013567ffffffffffffffff81111561192c5761192b6113e8565b5b611938878288016113fc565b9350935050604061194b878288016118c1565b91505092959194509250565b6000806040838503121561196e5761196d6113e3565b5b600061197c8582860161151e565b925050602061198d8582860161151e565b9150509250929050565b60006040820190506119ac6000830185611586565b6119b96020830184611586565b9392505050565b60008083601f8401126119d6576119d56113ed565b5b8235905067ffffffffffffffff8111156119f3576119f26113f2565b5b602083019150836020820283011115611a0f57611a0e6113f7565b5b9250929050565b600080600080600060608688031215611a3257611a316113e3565b5b6000611a408882890161151e565b955050602086013567ffffffffffffffff811115611a6157611a606113e8565b5b611a6d888289016113fc565b9450945050604086013567ffffffffffffffff811115611a9057611a8f6113e8565b5b611a9c888289016119c0565b92509250509295509295909350565b6000608082019050611ac060008301876116a7565b611acd6020830186611586565b611ada6040830185611586565b611ae760608301846117c9565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b26601083611738565b9150611b3182611af0565b602082019050919050565b60006020820190508181036000830152611b5581611b19565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b96826114fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bc857611bc7611b5c565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c5457607f821691505b602082108103611c6757611c66611c0d565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c92565b611cd98683611c92565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d16611d11611d0c846114fd565b611cf1565b6114fd565b9050919050565b6000819050919050565b611d3083611cfb565b611d44611d3c82611d1d565b848454611c9f565b825550505050565b600090565b611d59611d4c565b611d64818484611d27565b505050565b5b81811015611d8857611d7d600082611d51565b600181019050611d6a565b5050565b601f821115611dcd57611d9e81611c6d565b611da784611c82565b81016020851015611db6578190505b611dca611dc285611c82565b830182611d69565b50505b505050565b600082821c905092915050565b6000611df060001984600802611dd2565b1980831691505092915050565b6000611e098383611ddf565b9150826002028217905092915050565b611e238383611bd3565b67ffffffffffffffff811115611e3c57611e3b611bde565b5b611e468254611c3c565b611e51828285611d8c565b6000601f831160018114611e805760008415611e6e578287013590505b611e788582611dfd565b865550611ee0565b601f198416611e8e86611c6d565b60005b82811015611eb657848901358255600182019150602085019450602081019050611e91565b86831015611ed35784890135611ecf601f891682611ddf565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f45603683611738565b9150611f5082611ee9565b604082019050919050565b60006020820190508181036000830152611f7481611f38565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fb1601183611738565b9150611fbc82611f7b565b602082019050919050565b60006020820190508181036000830152611fe081611fa4565b9050919050565b6000611ff2826114fd565b9150611ffd836114fd565b925082820190508082111561201557612014611b5c565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b6000612051602083611738565b915061205c8261201b565b602082019050919050565b6000602082019050818103600083015261208081612044565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6120eb816114fd565b82525050565b6120fa816114bf565b82525050565b60408201600082015161211660008501826120e2565b50602082015161212960208501826120f1565b50505050565b600061213b8383612100565b60408301905092915050565b6000602082019050919050565b600061215f826120b6565b61216981856120c1565b9350612174836120d2565b8060005b838110156121a557815161218c888261212f565b975061219783612147565b925050600181019050612178565b5085935050505092915050565b600081546121bf81611c3c565b6121c98186611738565b945060018216600081146121e457600181146121fa5761222d565b60ff19831686528115156020028601935061222d565b61220385611c6d565b60005b8381101561222557815481890152600182019150602081019050612206565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b600061229161228c83612267565b612274565b9050919050565b6000819050919050565b6122ab81612298565b82525050565b600082825260208201905092915050565b600081546122cf81611c3c565b6122d981866122b1565b945060018216600081146122f4576001811461230a5761233d565b60ff19831686528115156020028601935061233d565b61231385611c6d565b60005b8381101561233557815481890152600182019150602081019050612316565b808801955050505b50505092915050565b600060408301600080840154905061235d8161227e565b61236a60008701826122a2565b5060018401858303602087015261238183826122c2565b925050819250505092915050565b600061239b8383612346565b905092915050565b6000600282019050919050565b60006123bb82612236565b6123c58185612241565b9350836020820285016123d785612252565b8060005b85811015612412578484038952816123f3858261238f565b94506123fe836123a3565b925060208a019950506001810190506123db565b50829750879550505050505092915050565b6000606082019050818103600083015261243e8186612154565b9050818103602083015261245281856121b2565b9050818103604083015261246681846123b0565b9050949350505050565b60006040820190506124856000830185611586565b61249260208301846117c9565b9392505050565b600060029050919050565b600081905092915050565b6000819050919050565b60006124c583836120e2565b60208301905092915050565b6000602082019050919050565b6124e781612499565b6124f181846124a4565b92506124fc826124af565b8060005b8381101561252d57815161251487826124b9565b965061251f836124d1565b925050600181019050612500565b505050505050565b6000819050919050565b600061255a61255561255084612535565b611cf1565b6114fd565b9050919050565b61256a8161253f565b82525050565b600082825260208201905092915050565b50565b6000612591600083612570565b915061259c82612581565b600082019050919050565b60006101408201905081810360008301526125c2818a6121b2565b90506125d16020830189611586565b6125de60408301886124de565b6125eb60808301876124de565b6125f860c0830186612561565b61260560e08301856117c9565b6126136101008301846117c9565b81810361012083015261262581612584565b905098975050505050505050565b60008151905061264281611507565b92915050565b60006020828403121561265e5761265d6113e3565b5b600061266c84828501612633565b91505092915050565b600060808201905061268a6000830187611586565b61269760208301866116a7565b6126a46040830185611586565b6126b160608301846117c9565b95945050505050565b82818337600083830152505050565b60006126d58385611738565b93506126e28385846126ba565b6126eb83611773565b840190509392505050565b82818337505050565b61270b606083836126f6565b5050565b600081519050919050565b60006127258261270f565b61272f8185612570565b935061273f818560208601611749565b61274881611773565b840191505092915050565b600060c082019050818103600083015261276e8187896126c9565b905061277d60208301866126ff565b61278a60808301856117c9565b81810360a083015261279c818461271a565b90509695505050505050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b6000612804603383611738565b915061280f826127a8565b604082019050919050565b60006020820190508181036000830152612833816127f7565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b6000612896602483611738565b91506128a18261283a565b604082019050919050565b600060208201905081810360008301526128c581612889565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b6000612902601883611738565b915061290d826128cc565b602082019050919050565b60006020820190508181036000830152612931816128f5565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612994603a83611738565b915061299f82612938565b604082019050919050565b600060208201905081810360008301526129c381612987565b9050919050565b600080fd5b600080fd5b600080fd5b6000823560016040038336030381126129f5576129f46129ca565b5b80830191505092915050565b612a0a81612298565b8114612a1557600080fd5b50565b60008135612a2581612a01565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612a6784612a2e565b9350801983169250808416831791505092915050565b6000612a98612a93612a8e84612298565b611cf1565b612298565b9050919050565b6000819050919050565b612ab282612a7d565b612ac5612abe82612a9f565b8354612a3b565b8255505050565b60008083356001602003843603038112612ae957612ae86129ca565b5b80840192508235915067ffffffffffffffff821115612b0b57612b0a6129cf565b5b602083019250600182023603831315612b2757612b266129d4565b5b509250929050565b612b3a838383611e19565b505050565b600081016000830180612b5181612a18565b9050612b5d8184612aa9565b5050506001810160208301612b728185612acc565b612b7d818386612b2f565b505050505050565b612b8f8282612b3f565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612bc9601a83611738565b9150612bd482612b93565b602082019050919050565b60006020820190508181036000830152612bf881612bbc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612c39826114fd565b9150612c44836114fd565b925082612c5457612c53612bff565b5b82820690509291505056fea264697066735822122020fad91210d3da55e5cb9d07b93dd5b6e548f7d12913fc4c85a5d427600c06dd64736f6c63430008180033", "linkReferences": {}, "deployedLinkReferences": {} } diff --git a/frontend/contractArtifacts/Work2.json b/frontend/contractArtifacts/Work2.json new file mode 100644 index 0000000..7882055 --- /dev/null +++ b/frontend/contractArtifacts/Work2.json @@ -0,0 +1,451 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "Work2", + "sourceName": "contracts/Work2.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "contract DAO", + "name": "dao", + "type": "address" + }, + { + "internalType": "contract Proposals", + "name": "proposals", + "type": "address" + }, + { + "internalType": "contract Rollup", + "name": "rollup", + "type": "address" + }, + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + } + ], + "name": "AvailabilityStaked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "priceProposalIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "price", + "type": "uint256" + } + ], + "name": "PriceChangeAccepted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "priceProposalIndex", + "type": "uint256" + } + ], + "name": "PriceChangeProposed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "name": "WorkApprovalSubmitted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + } + ], + "name": "WorkAssigned", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + } + ], + "name": "WorkEvidenceSubmitted", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "acceptAvailability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "duration", + "type": "uint256" + } + ], + "name": "extendAvailability", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "callbackData", + "type": "bytes" + } + ], + "name": "onProposalAccepted", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "priceProposalCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "priceProposals", + "outputs": [ + { + "internalType": "uint256", + "name": "price", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "proposalIndex", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newPrice", + "type": "uint256" + }, + { + "internalType": "string", + "name": "postId", + "type": "string" + }, + { + "internalType": "uint256[3]", + "name": "durations", + "type": "uint256[3]" + } + ], + "name": "proposeNewPrice", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "requestCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "requestPostId", + "type": "string" + } + ], + "name": "requestWork", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "requests", + "outputs": [ + { + "internalType": "address", + "name": "customer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "internalType": "enum Work.WorkStatus", + "name": "status", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "stakeIndex", + "type": "uint256" + }, + { + "internalType": "string", + "name": "requestPostId", + "type": "string" + }, + { + "internalType": "string", + "name": "evidencePostId", + "type": "string" + }, + { + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "stakeCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "name": "stakes", + "outputs": [ + { + "internalType": "address", + "name": "worker", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "endTime", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "assigned", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "approval", + "type": "bool" + } + ], + "name": "submitWorkApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "requestIndex", + "type": "uint256" + }, + { + "internalType": "string", + "name": "evidencePostId", + "type": "string" + }, + { + "components": [ + { + "internalType": "int256", + "name": "weightPPM", + "type": "int256" + }, + { + "internalType": "string", + "name": "targetPostId", + "type": "string" + } + ], + "internalType": "struct Citation[]", + "name": "citations", + "type": "tuple[]" + } + ], + "name": "submitWorkEvidence", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c06040523480156200001157600080fd5b5060405162002e2638038062002e26833981810160405281019062000037919062000246565b8383838383838282808073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050508060038190555081600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050508173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250505050505050505050620002b8565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620001358262000108565b9050919050565b6000620001498262000128565b9050919050565b6200015b816200013c565b81146200016757600080fd5b50565b6000815190506200017b8162000150565b92915050565b60006200018e8262000128565b9050919050565b620001a08162000181565b8114620001ac57600080fd5b50565b600081519050620001c08162000195565b92915050565b6000620001d38262000128565b9050919050565b620001e581620001c6565b8114620001f157600080fd5b50565b6000815190506200020581620001da565b92915050565b6000819050919050565b62000220816200020b565b81146200022c57600080fd5b50565b600081519050620002408162000215565b92915050565b6000806000806080858703121562000263576200026262000103565b5b600062000273878288016200016a565b94505060206200028687828801620001af565b93505060406200029987828801620001f4565b9250506060620002ac878288016200022f565b91505092959194509250565b60805160a051612b33620002f360003960008181610b300152610ba601526000818161049401528181610a3a0152610acf0152612b336000f3fe6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f79190611449565b610368565b005b34801561010a57600080fd5b506101256004803603810190610120919061152a565b610492565b005b34801561013357600080fd5b5061013c610632565b604051610149919061158c565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906115fd565b610638565b604051610186919061158c565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b19190611671565b6106b7565b6040516101c997969594939291906117cf565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611878565b610843565b005b610215600480360381019061021091906118da565b610c6a565b005b34801561022357600080fd5b5061022c610db3565b604051610239919061158c565b60405180910390f35b34801561024e57600080fd5b506102696004803603810190610264919061194e565b610db9565b005b34801561027757600080fd5b50610280610f2d565b60405161028d919061158c565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190611671565b610f33565b6040516102cb92919061198e565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611a0d565b610f57565b005b34801561030957600080fd5b50610324600480360381019061031f9190611671565b61118f565b6040516103349493929190611aa2565b60405180910390f35b34801561034957600080fd5b506103526111ec565b60405161035f919061158c565b60405180910390f35b6003543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611b33565b60405180910390fd5b6000600760008154809291906103c290611b82565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104336111f2565b8160030181905550838382600401918261044e929190611e10565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b482826003015460405161048492919061198e565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051790611f52565b60405180910390fd5b60008211610563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055a90611fbe565b60405180910390fd5b60006001600081548092919061057890611b82565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105ec9190611fde565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610623919061158c565b60405180910390a15050505050565b60075481565b600080838381019061064a9190611671565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106a192919061198e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461071f90611c33565b80601f016020809104026020016040519081016040528092919081815260200182805461074b90611c33565b80156107985780601f1061076d57610100808354040283529160200191610798565b820191906000526020600020905b81548152906001019060200180831161077b57829003601f168201915b5050505050908060050180546107ad90611c33565b80601f01602080910402602001604051908101604052809291908181526020018280546107d990611c33565b80156108265780601f106107fb57610100808354040283529160200191610826565b820191906000526020600020905b81548152906001019060200180831161080957829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b60006006600084815260200190815260200160002090506001600381111561086e5761086d6116ad565b5b8160020160009054906101000a900460ff166003811115610892576108916116ad565b5b146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c99061205e565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610914576109136116ad565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc848460405161096692919061207e565b60405180910390a16000600167ffffffffffffffff81111561098b5761098a611bd5565b5b6040519080825280602002602001820160405280156109c457816020015b6109b16113aa565b8152602001906001900390816109a95790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610a2d57610a2c6120a7565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610a9b93929190612444565b600060405180830381600087803b158015610ab557600080fd5b505af1158015610ac9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610b7293929190612490565b600060405180830381600087803b158015610b8c57600080fd5b505af1158015610ba0573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610c31939291906124c7565b6000604051808303818588803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610c7f90611b82565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610cfa919061158c565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610d299594939291906125af565b60206040518083038185885af1158015610d47573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d6c9190612619565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610da3919061158c565b60405180910390a1505050505050565b60035481565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e58906126b8565b60405180910390fd5b8060030160009054906101000a900460ff1615610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa9061274a565b60405180910390fd5b8060020154421115610ed8578142610ecb9190611fde565b8160020181905550610ef1565b818160020154610ee89190611fde565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f20919061158c565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610f8257610f816116ad565b5b8160020160009054906101000a900460ff166003811115610fa657610fa56116ad565b5b14610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd906127b6565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108990612848565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110ba576110b96116ad565b5b021790555085858360050191826110d2929190611e10565b5060005b8484905081101561114e57826006018585838181106110f8576110f76120a7565b5b905060200281019061110a9190612877565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161113f9190612a23565b505080806001019150506110d6565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8760405161117e919061158c565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b60006111fc611235565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156112b95760008082815260200190815260200160002060030160009054906101000a900460ff166112ac576000808281526020019081526020016000206002015442116112ac5760008082815260200190815260200160002060010154826112a99190611fde565b91505b808060010191505061123b565b50600081116112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490612a7d565b60405180910390fd5b6000814461130b9190612acc565b9050600080600090505b6001548110156113a35760008082815260200190815260200160002060030160009054906101000a900460ff16611396576000808281526020019081526020016000206002015442116113965760008082815260200190815260200160002060010154826113839190611fde565b915082821115611395578094506113a3565b5b8080600101915050611315565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611409576114086113e4565b5b8235905067ffffffffffffffff811115611426576114256113e9565b5b602083019150836001820283011115611442576114416113ee565b5b9250929050565b600080602083850312156114605761145f6113da565b5b600083013567ffffffffffffffff81111561147e5761147d6113df565b5b61148a858286016113f3565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c182611496565b9050919050565b6114d1816114b6565b81146114dc57600080fd5b50565b6000813590506114ee816114c8565b92915050565b6000819050919050565b611507816114f4565b811461151257600080fd5b50565b600081359050611524816114fe565b92915050565b600080600060608486031215611543576115426113da565b5b6000611551868287016114df565b935050602061156286828701611515565b925050604061157386828701611515565b9150509250925092565b611586816114f4565b82525050565b60006020820190506115a1600083018461157d565b92915050565b60008083601f8401126115bd576115bc6113e4565b5b8235905067ffffffffffffffff8111156115da576115d96113e9565b5b6020830191508360018202830111156115f6576115f56113ee565b5b9250929050565b60008060008060608587031215611617576116166113da565b5b600061162587828801611515565b945050602061163687828801611515565b935050604085013567ffffffffffffffff811115611657576116566113df565b5b611663878288016115a7565b925092505092959194509250565b600060208284031215611687576116866113da565b5b600061169584828501611515565b91505092915050565b6116a7816114b6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116ed576116ec6116ad565b5b50565b60008190506116fe826116dc565b919050565b600061170e826116f0565b9050919050565b61171e81611703565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561175e578082015181840152602081019050611743565b60008484015250505050565b6000601f19601f8301169050919050565b600061178682611724565b611790818561172f565b93506117a0818560208601611740565b6117a98161176a565b840191505092915050565b60008115159050919050565b6117c9816117b4565b82525050565b600060e0820190506117e4600083018a61169e565b6117f1602083018961157d565b6117fe6040830188611715565b61180b606083018761157d565b818103608083015261181d818661177b565b905081810360a0830152611831818561177b565b905061184060c08301846117c0565b98975050505050505050565b611855816117b4565b811461186057600080fd5b50565b6000813590506118728161184c565b92915050565b6000806040838503121561188f5761188e6113da565b5b600061189d85828601611515565b92505060206118ae85828601611863565b9150509250929050565b6000819050826020600302820111156118d4576118d36113ee565b5b92915050565b60008060008060a085870312156118f4576118f36113da565b5b600061190287828801611515565b945050602085013567ffffffffffffffff811115611923576119226113df565b5b61192f878288016113f3565b93509350506040611942878288016118b8565b91505092959194509250565b60008060408385031215611965576119646113da565b5b600061197385828601611515565b925050602061198485828601611515565b9150509250929050565b60006040820190506119a3600083018561157d565b6119b0602083018461157d565b9392505050565b60008083601f8401126119cd576119cc6113e4565b5b8235905067ffffffffffffffff8111156119ea576119e96113e9565b5b602083019150836020820283011115611a0657611a056113ee565b5b9250929050565b600080600080600060608688031215611a2957611a286113da565b5b6000611a3788828901611515565b955050602086013567ffffffffffffffff811115611a5857611a576113df565b5b611a64888289016113f3565b9450945050604086013567ffffffffffffffff811115611a8757611a866113df565b5b611a93888289016119b7565b92509250509295509295909350565b6000608082019050611ab7600083018761169e565b611ac4602083018661157d565b611ad1604083018561157d565b611ade60608301846117c0565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b1d60108361172f565b9150611b2882611ae7565b602082019050919050565b60006020820190508181036000830152611b4c81611b10565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b8d826114f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bbf57611bbe611b53565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c4b57607f821691505b602082108103611c5e57611c5d611c04565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611cc67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c89565b611cd08683611c89565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d0d611d08611d03846114f4565b611ce8565b6114f4565b9050919050565b6000819050919050565b611d2783611cf2565b611d3b611d3382611d14565b848454611c96565b825550505050565b600090565b611d50611d43565b611d5b818484611d1e565b505050565b5b81811015611d7f57611d74600082611d48565b600181019050611d61565b5050565b601f821115611dc457611d9581611c64565b611d9e84611c79565b81016020851015611dad578190505b611dc1611db985611c79565b830182611d60565b50505b505050565b600082821c905092915050565b6000611de760001984600802611dc9565b1980831691505092915050565b6000611e008383611dd6565b9150826002028217905092915050565b611e1a8383611bca565b67ffffffffffffffff811115611e3357611e32611bd5565b5b611e3d8254611c33565b611e48828285611d83565b6000601f831160018114611e775760008415611e65578287013590505b611e6f8582611df4565b865550611ed7565b601f198416611e8586611c64565b60005b82811015611ead57848901358255600182019150602085019450602081019050611e88565b86831015611eca5784890135611ec6601f891682611dd6565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f3c60368361172f565b9150611f4782611ee0565b604082019050919050565b60006020820190508181036000830152611f6b81611f2f565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fa860118361172f565b9150611fb382611f72565b602082019050919050565b60006020820190508181036000830152611fd781611f9b565b9050919050565b6000611fe9826114f4565b9150611ff4836114f4565b925082820190508082111561200c5761200b611b53565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061204860208361172f565b915061205382612012565b602082019050919050565b600060208201905081810360008301526120778161203b565b9050919050565b6000604082019050612093600083018561157d565b6120a060208301846117c0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61210b816114f4565b82525050565b61211a816114b6565b82525050565b6040820160008201516121366000850182612102565b5060208201516121496020850182612111565b50505050565b600061215b8383612120565b60408301905092915050565b6000602082019050919050565b600061217f826120d6565b61218981856120e1565b9350612194836120f2565b8060005b838110156121c55781516121ac888261214f565b97506121b783612167565b925050600181019050612198565b5085935050505092915050565b600081546121df81611c33565b6121e9818661172f565b94506001821660008114612204576001811461221a5761224d565b60ff19831686528115156020028601935061224d565b61222385611c64565b60005b8381101561224557815481890152600182019150602081019050612226565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122b16122ac83612287565b612294565b9050919050565b6000819050919050565b6122cb816122b8565b82525050565b600082825260208201905092915050565b600081546122ef81611c33565b6122f981866122d1565b94506001821660008114612314576001811461232a5761235d565b60ff19831686528115156020028601935061235d565b61233385611c64565b60005b8381101561235557815481890152600182019150602081019050612336565b808801955050505b50505092915050565b600060408301600080840154905061237d8161229e565b61238a60008701826122c2565b506001840185830360208701526123a183826122e2565b925050819250505092915050565b60006123bb8383612366565b905092915050565b6000600282019050919050565b60006123db82612256565b6123e58185612261565b9350836020820285016123f785612272565b8060005b858110156124325784840389528161241385826123af565b945061241e836123c3565b925060208a019950506001810190506123fb565b50829750879550505050505092915050565b6000606082019050818103600083015261245e8186612174565b9050818103602083015261247281856121d2565b9050818103604083015261248681846123d0565b9050949350505050565b60006060820190506124a5600083018661169e565b6124b2602083018561169e565b6124bf604083018461157d565b949350505050565b60006060820190506124dc600083018661169e565b6124e9602083018561157d565b81810360408301526124fb81846121d2565b9050949350505050565b82818337600083830152505050565b6000612520838561172f565b935061252d838584612505565b6125368361176a565b840190509392505050565b82818337505050565b61255660608383612541565b5050565b600081519050919050565b600082825260208201905092915050565b60006125818261255a565b61258b8185612565565b935061259b818560208601611740565b6125a48161176a565b840191505092915050565b600060c08201905081810360008301526125ca818789612514565b90506125d9602083018661254a565b6125e660808301856117c0565b81810360a08301526125f88184612576565b90509695505050505050565b600081519050612613816114fe565b92915050565b60006020828403121561262f5761262e6113da565b5b600061263d84828501612604565b91505092915050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006126a260338361172f565b91506126ad82612646565b604082019050919050565b600060208201905081810360008301526126d181612695565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061273460248361172f565b915061273f826126d8565b604082019050919050565b6000602082019050818103600083015261276381612727565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006127a060188361172f565b91506127ab8261276a565b602082019050919050565b600060208201905081810360008301526127cf81612793565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612832603a8361172f565b915061283d826127d6565b604082019050919050565b6000602082019050818103600083015261286181612825565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261289357612892612868565b5b80830191505092915050565b6128a8816122b8565b81146128b357600080fd5b50565b600081356128c38161289f565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612905846128cc565b9350801983169250808416831791505092915050565b600061293661293161292c846122b8565b611ce8565b6122b8565b9050919050565b6000819050919050565b6129508261291b565b61296361295c8261293d565b83546128d9565b8255505050565b6000808335600160200384360303811261298757612986612868565b5b80840192508235915067ffffffffffffffff8211156129a9576129a861286d565b5b6020830192506001820236038313156129c5576129c4612872565b5b509250929050565b6129d8838383611e10565b505050565b6000810160008301806129ef816128b6565b90506129fb8184612947565b5050506001810160208301612a10818561296a565b612a1b8183866129cd565b505050505050565b612a2d82826129dd565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612a67601a8361172f565b9150612a7282612a31565b602082019050919050565b60006020820190508181036000830152612a9681612a5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ad7826114f4565b9150612ae2836114f4565b925082612af257612af1612a9d565b5b82820690509291505056fea26469706673582212204753a1bfd0544b67fec12074efcbf6917581147c623802bfea5e76bb04e06aad64736f6c63430008180033", + "deployedBytecode": "0x6080604052600436106100dd5760003560e01c8063a035b1fe1161007f578063cf37625611610059578063cf37625614610296578063d0fae95f146102d4578063d5a44f86146102fd578063d76b67941461033d576100dd565b8063a035b1fe14610217578063b5b20c0014610242578063c4a9e1161461026b576100dd565b8063815a0572116100bb578063815a05721461015257806381d12c581461018f578063854b6a4f146101d257806399ad6c56146101fb576100dd565b80630d0271d6146100e2578063216ed6ad146100fe5780635badbe4c14610127575b600080fd5b6100fc60048036038101906100f79190611449565b610368565b005b34801561010a57600080fd5b506101256004803603810190610120919061152a565b610492565b005b34801561013357600080fd5b5061013c610632565b604051610149919061158c565b60405180910390f35b34801561015e57600080fd5b50610179600480360381019061017491906115fd565b610638565b604051610186919061158c565b60405180910390f35b34801561019b57600080fd5b506101b660048036038101906101b19190611671565b6106b7565b6040516101c997969594939291906117cf565b60405180910390f35b3480156101de57600080fd5b506101f960048036038101906101f49190611878565b610843565b005b610215600480360381019061021091906118da565b610c6a565b005b34801561022357600080fd5b5061022c610db3565b604051610239919061158c565b60405180910390f35b34801561024e57600080fd5b506102696004803603810190610264919061194e565b610db9565b005b34801561027757600080fd5b50610280610f2d565b60405161028d919061158c565b60405180910390f35b3480156102a257600080fd5b506102bd60048036038101906102b89190611671565b610f33565b6040516102cb92919061198e565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190611a0d565b610f57565b005b34801561030957600080fd5b50610324600480360381019061031f9190611671565b61118f565b6040516103349493929190611aa2565b60405180910390f35b34801561034957600080fd5b506103526111ec565b60405161035f919061158c565b60405180910390f35b6003543410156103ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103a490611b33565b60405180910390fd5b6000600760008154809291906103c290611b82565b9190505590506000600660008381526020019081526020016000209050338160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503481600101819055506104336111f2565b8160030181905550838382600401918261044e929190611e10565b507fd9e7f38a71691fb1db2da17057c03d381a42a9925350883f10e8e5d0bca4a3b482826003015460405161048492919061198e565b60405180910390a150505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161051790611f52565b60405180910390fd5b60008211610563576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055a90611fbe565b60405180910390fd5b60006001600081548092919061057890611b82565b91905055905060008060008381526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083816001018190555082426105ec9190611fde565b81600201819055507fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e982604051610623919061158c565b60405180910390a15050505050565b60075481565b600080838381019061064a9190611671565b9050600060046000838152602001908152602001600020905080600001546003819055507f6a3843c02c26620842ae8496fd3afcb44b27463b3808e2ccdae4bcee5a2e3f20826003546040516106a192919061198e565b60405180910390a1600092505050949350505050565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020160009054906101000a900460ff169080600301549080600401805461071f90611c33565b80601f016020809104026020016040519081016040528092919081815260200182805461074b90611c33565b80156107985780601f1061076d57610100808354040283529160200191610798565b820191906000526020600020905b81548152906001019060200180831161077b57829003601f168201915b5050505050908060050180546107ad90611c33565b80601f01602080910402602001604051908101604052809291908181526020018280546107d990611c33565b80156108265780601f106107fb57610100808354040283529160200191610826565b820191906000526020600020905b81548152906001019060200180831161080957829003601f168201915b5050505050908060070160009054906101000a900460ff16905087565b60006006600084815260200190815260200160002090506001600381111561086e5761086d6116ad565b5b8160020160009054906101000a900460ff166003811115610892576108916116ad565b5b146108d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c99061205e565b60405180910390fd5b600080600083600301548152602001908152602001600020905060028260020160006101000a81548160ff02191690836003811115610914576109136116ad565b5b0217905550828260070160006101000a81548160ff0219169083151502179055507f470d2978e081461f6d144c091dfd83ec06e6011da0b03bd1c0121b7fb71370dc848460405161096692919061207e565b60405180910390a16000600167ffffffffffffffff81111561098b5761098a611bd5565b5b6040519080825280602002602001820160405280156109c457816020015b6109b16113aa565b8152602001906001900390816109a95790505b5090506040518060400160405280620f424081526020018360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681525081600081518110610a2d57610a2c6120a7565b5b60200260200101819052507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e5b4d8278285600501866006016040518463ffffffff1660e01b8152600401610a9b93929190612444565b600060405180830381600087803b158015610ab557600080fd5b505af1158015610ac9573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635ffc70048360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000085600101546040518463ffffffff1660e01b8152600401610b7293929190612490565b600060405180830381600087803b158015610b8c57600080fd5b505af1158015610ba0573d6000803e3d6000fd5b505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f85c5a8a84600101548460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168560010154876005016040518563ffffffff1660e01b8152600401610c31939291906124c7565b6000604051808303818588803b158015610c4a57600080fd5b505af1158015610c5e573d6000803e3d6000fd5b50505050505050505050565b600060056000815480929190610c7f90611b82565b9190505590506000600460008381526020019081526020016000209050858160000181905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cac152a434878787600188604051602001610cfa919061158c565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610d299594939291906125af565b60206040518083038185885af1158015610d47573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610d6c9190612619565b81600101819055507f71eae802097e4e77c5345dee7f35d74ac0ae45eb5a456fdaed0de4d141fc5d8c82604051610da3919061158c565b60405180910390a1505050505050565b60035481565b600080600084815260200190815260200160002090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e58906126b8565b60405180910390fd5b8060030160009054906101000a900460ff1615610eb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaa9061274a565b60405180910390fd5b8060020154421115610ed8578142610ecb9190611fde565b8160020181905550610ef1565b818160020154610ee89190611fde565b81600201819055505b7fa85b1153cd317f9d39e14d8dbfb592ffb46123e9fc61b21b3f70d7d90a81a7e983604051610f20919061158c565b60405180910390a1505050565b60015481565b60046020528060005260406000206000915090508060000154908060010154905082565b600060066000878152602001908152602001600020905060006003811115610f8257610f816116ad565b5b8160020160009054906101000a900460ff166003811115610fa657610fa56116ad565b5b14610fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fdd906127b6565b60405180910390fd5b60008060008360030154815260200190815260200160002090503373ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108990612848565b60405180910390fd5b60018260020160006101000a81548160ff021916908360038111156110ba576110b96116ad565b5b021790555085858360050191826110d2929190611e10565b5060005b8484905081101561114e57826006018585838181106110f8576110f76120a7565b5b905060200281019061110a9190612877565b9080600181540180825580915050600190039060005260206000209060020201600090919091909150818161113f9190612a23565b505080806001019150506110d6565b507ffaecd3b4db089bf25a48306100dd5fb2152e3887c7815b2b221dbb7da2f8e8dc8760405161117e919061158c565b60405180910390a150505050505050565b60006020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030160009054906101000a900460ff16905084565b60055481565b60006111fc611235565b90506000806000838152602001908152602001600020905060018160030160006101000a81548160ff0219169083151502179055505090565b60008060005b6001548110156112b95760008082815260200190815260200160002060030160009054906101000a900460ff166112ac576000808281526020019081526020016000206002015442116112ac5760008082815260200190815260200160002060010154826112a99190611fde565b91505b808060010191505061123b565b50600081116112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490612a7d565b60405180910390fd5b6000814461130b9190612acc565b9050600080600090505b6001548110156113a35760008082815260200190815260200160002060030160009054906101000a900460ff16611396576000808281526020019081526020016000206002015442116113965760008082815260200190815260200160002060010154826113839190611fde565b915082821115611395578094506113a3565b5b8080600101915050611315565b5050505090565b604051806040016040528060008152602001600073ffffffffffffffffffffffffffffffffffffffff1681525090565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b60008083601f840112611409576114086113e4565b5b8235905067ffffffffffffffff811115611426576114256113e9565b5b602083019150836001820283011115611442576114416113ee565b5b9250929050565b600080602083850312156114605761145f6113da565b5b600083013567ffffffffffffffff81111561147e5761147d6113df565b5b61148a858286016113f3565b92509250509250929050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006114c182611496565b9050919050565b6114d1816114b6565b81146114dc57600080fd5b50565b6000813590506114ee816114c8565b92915050565b6000819050919050565b611507816114f4565b811461151257600080fd5b50565b600081359050611524816114fe565b92915050565b600080600060608486031215611543576115426113da565b5b6000611551868287016114df565b935050602061156286828701611515565b925050604061157386828701611515565b9150509250925092565b611586816114f4565b82525050565b60006020820190506115a1600083018461157d565b92915050565b60008083601f8401126115bd576115bc6113e4565b5b8235905067ffffffffffffffff8111156115da576115d96113e9565b5b6020830191508360018202830111156115f6576115f56113ee565b5b9250929050565b60008060008060608587031215611617576116166113da565b5b600061162587828801611515565b945050602061163687828801611515565b935050604085013567ffffffffffffffff811115611657576116566113df565b5b611663878288016115a7565b925092505092959194509250565b600060208284031215611687576116866113da565b5b600061169584828501611515565b91505092915050565b6116a7816114b6565b82525050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600481106116ed576116ec6116ad565b5b50565b60008190506116fe826116dc565b919050565b600061170e826116f0565b9050919050565b61171e81611703565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561175e578082015181840152602081019050611743565b60008484015250505050565b6000601f19601f8301169050919050565b600061178682611724565b611790818561172f565b93506117a0818560208601611740565b6117a98161176a565b840191505092915050565b60008115159050919050565b6117c9816117b4565b82525050565b600060e0820190506117e4600083018a61169e565b6117f1602083018961157d565b6117fe6040830188611715565b61180b606083018761157d565b818103608083015261181d818661177b565b905081810360a0830152611831818561177b565b905061184060c08301846117c0565b98975050505050505050565b611855816117b4565b811461186057600080fd5b50565b6000813590506118728161184c565b92915050565b6000806040838503121561188f5761188e6113da565b5b600061189d85828601611515565b92505060206118ae85828601611863565b9150509250929050565b6000819050826020600302820111156118d4576118d36113ee565b5b92915050565b60008060008060a085870312156118f4576118f36113da565b5b600061190287828801611515565b945050602085013567ffffffffffffffff811115611923576119226113df565b5b61192f878288016113f3565b93509350506040611942878288016118b8565b91505092959194509250565b60008060408385031215611965576119646113da565b5b600061197385828601611515565b925050602061198485828601611515565b9150509250929050565b60006040820190506119a3600083018561157d565b6119b0602083018461157d565b9392505050565b60008083601f8401126119cd576119cc6113e4565b5b8235905067ffffffffffffffff8111156119ea576119e96113e9565b5b602083019150836020820283011115611a0657611a056113ee565b5b9250929050565b600080600080600060608688031215611a2957611a286113da565b5b6000611a3788828901611515565b955050602086013567ffffffffffffffff811115611a5857611a576113df565b5b611a64888289016113f3565b9450945050604086013567ffffffffffffffff811115611a8757611a866113df565b5b611a93888289016119b7565b92509250509295509295909350565b6000608082019050611ab7600083018761169e565b611ac4602083018661157d565b611ad1604083018561157d565b611ade60608301846117c0565b95945050505050565b7f496e73756666696369656e742066656500000000000000000000000000000000600082015250565b6000611b1d60108361172f565b9150611b2882611ae7565b602082019050919050565b60006020820190508181036000830152611b4c81611b10565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611b8d826114f4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611bbf57611bbe611b53565b5b600182019050919050565b600082905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611c4b57607f821691505b602082108103611c5e57611c5d611c04565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302611cc67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611c89565b611cd08683611c89565b95508019841693508086168417925050509392505050565b6000819050919050565b6000611d0d611d08611d03846114f4565b611ce8565b6114f4565b9050919050565b6000819050919050565b611d2783611cf2565b611d3b611d3382611d14565b848454611c96565b825550505050565b600090565b611d50611d43565b611d5b818484611d1e565b505050565b5b81811015611d7f57611d74600082611d48565b600181019050611d61565b5050565b601f821115611dc457611d9581611c64565b611d9e84611c79565b81016020851015611dad578190505b611dc1611db985611c79565b830182611d60565b50505b505050565b600082821c905092915050565b6000611de760001984600802611dc9565b1980831691505092915050565b6000611e008383611dd6565b9150826002028217905092915050565b611e1a8383611bca565b67ffffffffffffffff811115611e3357611e32611bd5565b5b611e3d8254611c33565b611e48828285611d83565b6000601f831160018114611e775760008415611e65578287013590505b611e6f8582611df4565b865550611ed7565b601f198416611e8586611c64565b60005b82811015611ead57848901358255600182019150602085019450602081019050611e88565b86831015611eca5784890135611ec6601f891682611dd6565b8355505b6001600288020188555050505b50505050505050565b7f616363657074417661696c6162696c697479206d757374206f6e6c792062652060008201527f63616c6c65642062792044414f20636f6e747261637400000000000000000000602082015250565b6000611f3c60368361172f565b9150611f4782611ee0565b604082019050919050565b60006020820190508181036000830152611f6b81611f2f565b9050919050565b7f4e6f207374616b652070726f7669646564000000000000000000000000000000600082015250565b6000611fa860118361172f565b9150611fb382611f72565b602082019050919050565b60006020820190508181036000830152611fd781611f9b565b9050919050565b6000611fe9826114f4565b9150611ff4836114f4565b925082820190508082111561200c5761200b611b53565b5b92915050565b7f537461747573206d7573742062652045766964656e63655375626d6974746564600082015250565b600061204860208361172f565b915061205382612012565b602082019050919050565b600060208201905081810360008301526120778161203b565b9050919050565b6000604082019050612093600083018561157d565b6120a060208301846117c0565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61210b816114f4565b82525050565b61211a816114b6565b82525050565b6040820160008201516121366000850182612102565b5060208201516121496020850182612111565b50505050565b600061215b8383612120565b60408301905092915050565b6000602082019050919050565b600061217f826120d6565b61218981856120e1565b9350612194836120f2565b8060005b838110156121c55781516121ac888261214f565b97506121b783612167565b925050600181019050612198565b5085935050505092915050565b600081546121df81611c33565b6121e9818661172f565b94506001821660008114612204576001811461221a5761224d565b60ff19831686528115156020028601935061224d565b61222385611c64565b60005b8381101561224557815481890152600182019150602081019050612226565b808801955050505b50505092915050565b600081549050919050565b600082825260208201905092915050565b60008190508160005260206000209050919050565b60008160001c9050919050565b6000819050919050565b60006122b16122ac83612287565b612294565b9050919050565b6000819050919050565b6122cb816122b8565b82525050565b600082825260208201905092915050565b600081546122ef81611c33565b6122f981866122d1565b94506001821660008114612314576001811461232a5761235d565b60ff19831686528115156020028601935061235d565b61233385611c64565b60005b8381101561235557815481890152600182019150602081019050612336565b808801955050505b50505092915050565b600060408301600080840154905061237d8161229e565b61238a60008701826122c2565b506001840185830360208701526123a183826122e2565b925050819250505092915050565b60006123bb8383612366565b905092915050565b6000600282019050919050565b60006123db82612256565b6123e58185612261565b9350836020820285016123f785612272565b8060005b858110156124325784840389528161241385826123af565b945061241e836123c3565b925060208a019950506001810190506123fb565b50829750879550505050505092915050565b6000606082019050818103600083015261245e8186612174565b9050818103602083015261247281856121d2565b9050818103604083015261248681846123d0565b9050949350505050565b60006060820190506124a5600083018661169e565b6124b2602083018561169e565b6124bf604083018461157d565b949350505050565b60006060820190506124dc600083018661169e565b6124e9602083018561157d565b81810360408301526124fb81846121d2565b9050949350505050565b82818337600083830152505050565b6000612520838561172f565b935061252d838584612505565b6125368361176a565b840190509392505050565b82818337505050565b61255660608383612541565b5050565b600081519050919050565b600082825260208201905092915050565b60006125818261255a565b61258b8185612565565b935061259b818560208601611740565b6125a48161176a565b840191505092915050565b600060c08201905081810360008301526125ca818789612514565b90506125d9602083018661254a565b6125e660808301856117c0565b81810360a08301526125f88184612576565b90509695505050505050565b600081519050612613816114fe565b92915050565b60006020828403121561262f5761262e6113da565b5b600061263d84828501612604565b91505092915050565b7f576f726b65722063616e206f6e6c7920657874656e64207468656972206f776e60008201527f20617661696c6162696c697479207374616b6500000000000000000000000000602082015250565b60006126a260338361172f565b91506126ad82612646565b604082019050919050565b600060208201905081810360008301526126d181612695565b9050919050565b7f5374616b652068617320616c7265616479206265656e2061737369676e65642060008201527f776f726b00000000000000000000000000000000000000000000000000000000602082015250565b600061273460248361172f565b915061273f826126d8565b604082019050919050565b6000602082019050818103600083015261276381612727565b9050919050565b7f537461747573206d757374206265205265717565737465640000000000000000600082015250565b60006127a060188361172f565b91506127ab8261276a565b602082019050919050565b600060208201905081810360008301526127cf81612793565b9050919050565b7f576f726b65722063616e206f6e6c79207375626d69742065766964656e63652060008201527f666f7220776f726b2074686579206172652061737369676e6564000000000000602082015250565b6000612832603a8361172f565b915061283d826127d6565b604082019050919050565b6000602082019050818103600083015261286181612825565b9050919050565b600080fd5b600080fd5b600080fd5b60008235600160400383360303811261289357612892612868565b5b80830191505092915050565b6128a8816122b8565b81146128b357600080fd5b50565b600081356128c38161289f565b80915050919050565b60008160001b9050919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612905846128cc565b9350801983169250808416831791505092915050565b600061293661293161292c846122b8565b611ce8565b6122b8565b9050919050565b6000819050919050565b6129508261291b565b61296361295c8261293d565b83546128d9565b8255505050565b6000808335600160200384360303811261298757612986612868565b5b80840192508235915067ffffffffffffffff8211156129a9576129a861286d565b5b6020830192506001820236038313156129c5576129c4612872565b5b509250929050565b6129d8838383611e10565b505050565b6000810160008301806129ef816128b6565b90506129fb8184612947565b5050506001810160208301612a10818561296a565b612a1b8183866129cd565b505050505050565b612a2d82826129dd565b5050565b7f4e6f20617661696c61626c6520776f726b6572207374616b6573000000000000600082015250565b6000612a67601a8361172f565b9150612a7282612a31565b602082019050919050565b60006020820190508181036000830152612a9681612a5a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612ad7826114f4565b9150612ae2836114f4565b925082612af257612af1612a9d565b5b82820690509291505056fea26469706673582212204753a1bfd0544b67fec12074efcbf6917581147c623802bfea5e76bb04e06aad64736f6c63430008180033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/frontend/src/WebApp.jsx b/frontend/src/WebApp.jsx index ae632eb..dc4c560 100644 --- a/frontend/src/WebApp.jsx +++ b/frontend/src/WebApp.jsx @@ -1,263 +1,27 @@ -import { - useCallback, useEffect, useState, useMemo, useRef, -} from 'react'; -import { useSDK } from '@metamask/sdk-react'; -import { Web3 } from 'web3'; +import { useCallback } from 'react'; import Button from 'react-bootstrap/Button'; -import Tab from 'react-bootstrap/Tab'; -import Tabs from 'react-bootstrap/Tabs'; import Container from 'react-bootstrap/Container'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; import Stack from 'react-bootstrap/Stack'; -import useList from './utils/List'; -import { getContractAddressByChainId } from './utils/contract-config'; -import Web3Context from './contexts/Web3Context'; -import DAOArtifact from '../contractArtifacts/DAO.json'; -import Work1Artifact from '../contractArtifacts/Work1.json'; -import OnboardingArtifact from '../contractArtifacts/Onboarding.json'; -import WorkContract from './components/work-contracts/WorkContract'; -import AddPostModal from './components/posts/AddPostModal'; -import ViewPostModal from './components/posts/ViewPostModal'; -import Post from './utils/Post'; -import Proposals from './components/Proposals'; -import ImportPaper from './components/ImportPaper'; -import ImportPapersByAuthor from './components/ImportPapersByAuthor'; -import getAddressName from './utils/get-address-name'; -import ImportMatrixEvent from './components/ImportMatrixEvent'; +import MainTabs from './components/tabs'; +import useMainContext from './contexts/useMainContext'; function WebApp() { const { - sdk, connected, provider, chainId, account, balance, - } = useSDK(); - - const DAORef = useRef(); - const workRef = useRef(); - const onboardingRef = useRef(); - const [DAO, setDAO] = useState(); - const [work1, setWork1] = useState(); - const [onboarding, setOnboarding] = useState(); - const [balanceEther, setBalanceEther] = useState(); - const [reputation, setReputation] = useState(); - const [totalReputation, setTotalReputation] = useState(); - const [members, dispatchMember] = useList(); - const [posts, dispatchPost] = useList(); - const [validationPools, dispatchValidationPool] = useList(); - const [showAddPost, setShowAddPost] = useState(false); - const [showViewPost, setShowViewPost] = useState(false); - const [viewPost, setViewPost] = useState({}); - const web3ProviderValue = useMemo(() => ({ - provider, - DAO, - work1, - onboarding, - reputation, - setReputation, - account, - chainId, - posts, - DAORef, - workRef, - onboardingRef, - }), [ - provider, DAO, work1, onboarding, reputation, setReputation, account, chainId, posts, - DAORef, workRef, onboardingRef]); - - useEffect(() => { - if (!provider || balance === undefined) return; - const web3 = new Web3(provider); - setBalanceEther(web3.utils.fromWei(balance, 'ether')); - }, [provider, balance]); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- BEGIN FETCHERS ------------------------------------- */ - /* -------------------------------------------------------------------------------- */ - - const fetchReputation = useCallback(async () => { - setReputation(await DAORef.current.methods.balanceOf(account).call()); - setTotalReputation(await DAORef.current.methods.totalSupply().call()); - }, [DAORef, account]); - - const fetchPost = useCallback(async (postId) => { - const post = await DAORef.current.methods.posts(postId).call(); - post.authors = await DAORef.current.methods.getPostAuthors(postId).call(); - dispatchPost({ type: 'updateById', item: post }); - return post; - }, [DAORef, dispatchPost]); - - const fetchPostId = useCallback(async (postIndex) => { - const postId = await DAORef.current.methods.postIds(postIndex).call(); - return postId; - }, [DAORef]); - - const fetchPosts = useCallback(async () => { - const count = await DAORef.current.methods.postCount().call(); - let promises = []; - dispatchPost({ type: 'refresh' }); - for (let i = 0; i < count; i += 1) { - promises.push(fetchPostId(i)); - } - const postIds = await Promise.all(promises); - promises = []; - postIds.forEach((postId) => { - promises.push(fetchPost(postId)); - }); - }, [DAORef, dispatchPost, fetchPost, fetchPostId]); - - const fetchValidationPool = useCallback(async (poolIndex) => { - const getPoolStatus = (pool) => { - if (pool.resolved) { - return pool.outcome ? 'Accepted' : 'Rejected'; - } - return pool.timeRemaining > 0 ? 'In Progress' : 'Ready to Evaluate'; - }; - const pool = await DAORef.current.methods.validationPools(poolIndex).call(); - pool.id = Number(pool.id); - pool.timeRemaining = new Date(Number(pool.endTime) * 1000) - new Date(); - pool.status = getPoolStatus(pool); - dispatchValidationPool({ type: 'update', item: pool }); - - // When remaing time expires, we want to update the status for this pool - if (pool.timeRemaining > 0) { - setTimeout(() => { - pool.timeRemaining = 0; - pool.status = getPoolStatus(pool); - dispatchValidationPool({ type: 'update', item: pool }); - }, pool.timeRemaining); - } - }, [DAORef, dispatchValidationPool]); - - const fetchValidationPools = useCallback(async () => { - // TODO: Pagination - // TODO: Memoization - // TODO: Caching - const count = await DAORef.current.methods.validationPoolCount().call(); - const promises = []; - dispatchValidationPool({ type: 'refresh' }); - for (let i = 0; i < count; i += 1) { - promises.push(fetchValidationPool(i)); - } - await Promise.all(promises); - }, [DAORef, dispatchValidationPool, fetchValidationPool]); - - const fetchMember = useCallback(async (memberIndex) => { - const id = await DAORef.current.methods.members(memberIndex).call(); - const member = { id }; - member.reputation = await DAORef.current.methods.balanceOf(id).call(); - dispatchMember({ type: 'updateById', item: member }); - return member; - }, [DAORef, dispatchMember]); - - const fetchMembers = useCallback(async () => { - const count = await DAORef.current.methods.memberCount().call(); - const promises = []; - dispatchMember({ type: 'refresh' }); - for (let i = 0; i < count; i += 1) { - promises.push(fetchMember(i)); - } - await Promise.all(promises); - }, [DAORef, dispatchMember, fetchMember]); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- END FETCHERS --------------------------------------- */ - /* -------------------------------------------------------------------------------- */ - // In this effect, we initialize everything and add contract event listeners. - useEffect(() => { - if (!provider || !chainId || !account || balance === undefined) return () => {}; - const DAOAddress = getContractAddressByChainId(chainId, 'DAO'); - const Work1Address = getContractAddressByChainId(chainId, 'Work1'); - const OnboardingAddress = getContractAddressByChainId(chainId, 'Onboarding'); - const web3 = new Web3(provider); - const DAOContract = new web3.eth.Contract(DAOArtifact.abi, DAOAddress); - const Work1Contract = new web3.eth.Contract(Work1Artifact.abi, Work1Address); - const OnboardingContract = new web3.eth.Contract(OnboardingArtifact.abi, OnboardingAddress); - DAORef.current = DAOContract; - workRef.current = Work1Contract; - onboardingRef.current = OnboardingContract; - - fetchReputation(); - fetchMembers(); - fetchPosts(); - fetchValidationPools(); - - setDAO(DAOContract); - setWork1(Work1Contract); - setOnboarding(OnboardingContract); - - // const fetchReputationInterval = setInterval(() => { - // // console.log('reputation', reputation); - // if (reputation !== undefined) { - // clearInterval(fetchReputationInterval); - // return; - // } - // fetchReputation(); - // }, 1000); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- BEGIN EVENT HANDLERS ------------------------------- */ - /* -------------------------------------------------------------------------------- */ - - DAOContract.events.PostAdded({ fromBlock: 'latest' }).on('data', (event) => { - console.log('event: post added'); - fetchPost(event.returnValues.id); - }); - - DAOContract.events.ValidationPoolInitiated({ fromBlock: 'latest' }).on('data', (event) => { - console.log('event: validation pool initiated'); - fetchValidationPool(event.returnValues.poolIndex); - }); - - DAOContract.events.ValidationPoolResolved({ fromBlock: 'latest' }).on('data', (event) => { - console.log('event: validation pool resolved'); - fetchReputation(); - fetchValidationPool(event.returnValues.poolIndex); - fetchMembers(); - }); - - Work1Contract.events.AvailabilityStaked({ fromBlock: 'latest' }).on('data', () => { - fetchReputation(); - }); - - OnboardingContract.events.AvailabilityStaked({ fromBlock: 'latest' }).on('data', () => { - fetchReputation(); - }); - - return () => { - DAOContract.events.PostAdded().off(); - DAOContract.events.ValidationPoolInitiated().off(); - DAOContract.events.ValidationPoolResolved().off(); - Work1Contract.events.AvailabilityStaked().off(); - OnboardingContract.events.AvailabilityStaked().off(); - }; - }, [provider, account, chainId, balance, dispatchValidationPool, dispatchPost, - DAORef, workRef, onboardingRef, - fetchPost, fetchPosts, fetchReputation, fetchValidationPool, fetchValidationPools, fetchMembers, - ]); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- END MAIN INITIALIZION EFFECT ----------------------- */ - /* -------------------------------------------------------------------------------- */ - - // useEffect(() => { - // // api.requestCapability(MatrixCapabilities.) - // api.on('action:m.message', (ev) => { - // console.log('action:m.message', ev); - // }); - // api.start(); - // }, []); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- BEGIN UI ACTIONS ----------------------------------- */ - /* -------------------------------------------------------------------------------- */ + sdk, connected, chainId, account, reputation, totalReputation, balanceEther, + } = useMainContext(); const connect = useCallback(async () => { try { await sdk?.connect(); + console.log('connected'); + console.log('connected', connected); } catch (err) { console.warn('failed to connect..', err); } - }, [sdk]); + }, [sdk, connected]); const disconnect = useCallback(async () => { try { @@ -267,67 +31,8 @@ function WebApp() { } }, [sdk]); - const initiateValidationPool = useCallback(async (postId, poolDuration) => { - const web3 = new Web3(provider); - await DAO.methods.initiateValidationPool( - postId, - poolDuration ?? 3600, - [1, 3], - [1, 2], - 100, - true, - false, - web3.eth.abi.encodeParameter('bytes', '0x00'), - ).send({ - from: account, - gas: 1000000, - value: 10000, - }); - }, [provider, DAO, account]); - - const stake = useCallback(async (poolIndex, amount, inFavor) => { - console.log(`Attempting to stake ${amount} ${inFavor ? 'for' : 'against'} pool ${poolIndex}`); - await DAO.methods.stakeOnValidationPool(poolIndex, amount, inFavor).send({ - from: account, - gas: 999999, - }); - - // Since this is the result we expect from the server, we preemptively set it here. - // We can let this value be negative -- this would just mean we'll be getting - // at least one error from the server, and a corrected reputation. - setReputation((current) => current - BigInt(amount)); - }, [DAO, account, setReputation]); - - const stakeHalfInFavor = useCallback(async (poolIndex) => { - await stake(poolIndex, reputation / BigInt(2), true); - }, [stake, reputation]); - - const evaluateOutcome = useCallback(async (poolIndex) => { - await DAO.methods.evaluateOutcome(poolIndex).send({ - from: account, - gas: 10000000, - }); - }, [DAO, account]); - - const handleShowAddPost = () => setShowAddPost(true); - - const handleShowViewPost = useCallback(async ({ id }) => { - const post = await Post.read(id); - setViewPost(post); - setShowViewPost(true); - }, [setViewPost, setShowViewPost]); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- END UI ACTIONS ------------------------------------- */ - /* -------------------------------------------------------------------------------- */ - return ( - - - - - - + <> {!connected && } {connected && ( @@ -372,211 +77,11 @@ function WebApp() { - - -

Members

-
- {`Members count: ${members.length}`} -
-
- - - - - - - - - {members.filter((x) => !!x).map((member) => ( - - - - - ))} - -
IDReputation
{member.id}{member.reputation.toString()}
-
- {' '} -

Posts

-
- -
-
- {`Posts count: ${posts.length}`} -
-
- - - - - - - - - - - - {posts.filter((x) => !!x).map((post) => ( - - - - - - - - ))} - -
IDAuthorsSenderReputationActions
{post.id.toString()} - - {post.authors.map(({ authorAddress, weightPPM }) => ( -
- {getAddressName(chainId, authorAddress)} - {' '} - {Number(weightPPM) / 10000} - % -
- ))} -
-
{getAddressName(chainId, post.sender)}{post.reputation.toString()} - - {' '} - Initiate Validation Pool - {' '} - - {' '} - - {' '} - -
-
-

Validation Pools

-
- {`Validation Pool Count: ${validationPools.length}`} -
-
- - - - - - - - - - - - - - - - - - - - {validationPools.filter((x) => !!x).map((pool) => ( - - - - - - - - - - - - - - - - ))} - -
IDPost IDSenderFeeBindingQuorumWinRatio - Redistribute -
- Losing Stakes -
DurationEnd Time - Stake -
- Count -
StatusActions
{pool.id.toString()}{pool.postId}{getAddressName(chainId, pool.sender)}{pool.fee.toString()} - {pool.params.bindingPercent.toString()} - % - {`${pool.params.quorum[0].toString()}/${pool.params.quorum[1].toString()}`}{`${pool.params.winRatio[0].toString()}/${pool.params.winRatio[1].toString()}`}{pool.params.redistributeLosingStakes.toString()}{pool.params.duration.toString()}{new Date(Number(pool.endTime) * 1000).toLocaleString()}{pool.stakeCount.toString()}{pool.status} - {!pool.resolved && reputation > 0 && pool.timeRemaining > 0 && ( - <> - - {' '} - - {' '} - - )} - {!pool.resolved && (pool.timeRemaining <= 0 || !reputation) && ( - - )} -
-
-
- - {work1 && ( - - )} - {onboarding && ( - - )} - - - {work1 && ( - - )} - - - - - -

Semantic Scholar

- - -

Matrix

- -
-
+ + )} -
+ ); } diff --git a/frontend/src/Widget.jsx b/frontend/src/Widget.jsx index aeeaaf2..d5d9f5d 100644 --- a/frontend/src/Widget.jsx +++ b/frontend/src/Widget.jsx @@ -1,11 +1,7 @@ import { - useCallback, useEffect, useState, useMemo, useRef, + useCallback, useEffect, useRef, } from 'react'; -import { useSDK } from '@metamask/sdk-react'; -import { Web3 } from 'web3'; import Button from 'react-bootstrap/Button'; -import Tab from 'react-bootstrap/Tab'; -import Tabs from 'react-bootstrap/Tabs'; import Container from 'react-bootstrap/Container'; import Row from 'react-bootstrap/Row'; import Col from 'react-bootstrap/Col'; @@ -14,234 +10,15 @@ import { WidgetApi, EventDirection, WidgetEventCapability, } from 'matrix-widget-api'; -import useList from './utils/List'; -import { getContractAddressByChainId } from './utils/contract-config'; -import Web3Context from './contexts/Web3Context'; -import DAOArtifact from '../contractArtifacts/DAO.json'; -import Work1Artifact from '../contractArtifacts/Work1.json'; -import OnboardingArtifact from '../contractArtifacts/Onboarding.json'; -import WorkContract from './components/work-contracts/WorkContract'; -import AddPostModal from './components/posts/AddPostModal'; -import ViewPostModal from './components/posts/ViewPostModal'; -import Post from './utils/Post'; -import Proposals from './components/Proposals'; -import ImportPaper from './components/ImportPaper'; -import ImportPapersByAuthor from './components/ImportPapersByAuthor'; -import getAddressName from './utils/get-address-name'; -import ImportMatrixEvent from './components/ImportMatrixEvent'; +import MainTabs from './components/tabs'; +import useMainContext from './contexts/useMainContext'; function Widget() { const { - sdk, connected, provider, chainId, account, balance, - } = useSDK(); + sdk, connected, provider, chainId, account, balanceEther, reputation, totalReputation, + } = useMainContext(); - const DAORef = useRef(); - const workRef = useRef(); - const onboardingRef = useRef(); - const [DAO, setDAO] = useState(); - const [work1, setWork1] = useState(); - const [onboarding, setOnboarding] = useState(); - const [balanceEther, setBalanceEther] = useState(); - const [reputation, setReputation] = useState(); - const [totalReputation, setTotalReputation] = useState(); - const [members, dispatchMember] = useList(); - const [posts, dispatchPost] = useList(); - const [validationPools, dispatchValidationPool] = useList(); - const [showAddPost, setShowAddPost] = useState(false); - const [showViewPost, setShowViewPost] = useState(false); - const [viewPost, setViewPost] = useState({}); const widgetApi = useRef(); - const web3ProviderValue = useMemo(() => ({ - provider, - DAO, - work1, - onboarding, - reputation, - setReputation, - account, - chainId, - posts, - DAORef, - workRef, - onboardingRef, - }), [ - provider, DAO, work1, onboarding, reputation, setReputation, account, chainId, posts, - DAORef, workRef, onboardingRef]); - - useEffect(() => { - if (!provider || balance === undefined) return; - const web3 = new Web3(provider); - setBalanceEther(web3.utils.fromWei(balance, 'ether')); - }, [provider, balance]); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- BEGIN FETCHERS ------------------------------------- */ - /* -------------------------------------------------------------------------------- */ - - const fetchReputation = useCallback(async () => { - setReputation(await DAORef.current.methods.balanceOf(account).call()); - setTotalReputation(await DAORef.current.methods.totalSupply().call()); - }, [DAORef, account]); - - const fetchPost = useCallback(async (postId) => { - const post = await DAORef.current.methods.posts(postId).call(); - post.authors = await DAORef.current.methods.getPostAuthors(postId).call(); - dispatchPost({ type: 'updateById', item: post }); - return post; - }, [DAORef, dispatchPost]); - - const fetchPostId = useCallback(async (postIndex) => { - const postId = await DAORef.current.methods.postIds(postIndex).call(); - return postId; - }, [DAORef]); - - const fetchPosts = useCallback(async () => { - const count = await DAORef.current.methods.postCount().call(); - let promises = []; - dispatchPost({ type: 'refresh' }); - for (let i = 0; i < count; i += 1) { - promises.push(fetchPostId(i)); - } - const postIds = await Promise.all(promises); - promises = []; - postIds.forEach((postId) => { - promises.push(fetchPost(postId)); - }); - }, [DAORef, dispatchPost, fetchPost, fetchPostId]); - - const fetchValidationPool = useCallback(async (poolIndex) => { - const getPoolStatus = (pool) => { - if (pool.resolved) { - return pool.outcome ? 'Accepted' : 'Rejected'; - } - return pool.timeRemaining > 0 ? 'In Progress' : 'Ready to Evaluate'; - }; - const pool = await DAORef.current.methods.validationPools(poolIndex).call(); - pool.id = Number(pool.id); - pool.timeRemaining = new Date(Number(pool.endTime) * 1000) - new Date(); - pool.status = getPoolStatus(pool); - dispatchValidationPool({ type: 'update', item: pool }); - - // When remaing time expires, we want to update the status for this pool - if (pool.timeRemaining > 0) { - setTimeout(() => { - pool.timeRemaining = 0; - pool.status = getPoolStatus(pool); - dispatchValidationPool({ type: 'update', item: pool }); - }, pool.timeRemaining); - } - }, [DAORef, dispatchValidationPool]); - - const fetchValidationPools = useCallback(async () => { - // TODO: Pagination - // TODO: Memoization - // TODO: Caching - const count = await DAORef.current.methods.validationPoolCount().call(); - const promises = []; - dispatchValidationPool({ type: 'refresh' }); - for (let i = 0; i < count; i += 1) { - promises.push(fetchValidationPool(i)); - } - await Promise.all(promises); - }, [DAORef, dispatchValidationPool, fetchValidationPool]); - - const fetchMember = useCallback(async (memberIndex) => { - const id = await DAORef.current.methods.members(memberIndex).call(); - const member = { id }; - member.reputation = await DAORef.current.methods.balanceOf(id).call(); - dispatchMember({ type: 'updateById', item: member }); - return member; - }, [DAORef, dispatchMember]); - - const fetchMembers = useCallback(async () => { - const count = await DAORef.current.methods.memberCount().call(); - const promises = []; - dispatchMember({ type: 'refresh' }); - for (let i = 0; i < count; i += 1) { - promises.push(fetchMember(i)); - } - await Promise.all(promises); - }, [DAORef, dispatchMember, fetchMember]); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- END FETCHERS --------------------------------------- */ - /* -------------------------------------------------------------------------------- */ - // In this effect, we initialize everything and add contract event listeners. - useEffect(() => { - if (!provider || !chainId || !account || balance === undefined) return () => {}; - const DAOAddress = getContractAddressByChainId(chainId, 'DAO'); - const Work1Address = getContractAddressByChainId(chainId, 'Work1'); - const OnboardingAddress = getContractAddressByChainId(chainId, 'Onboarding'); - const web3 = new Web3(provider); - const DAOContract = new web3.eth.Contract(DAOArtifact.abi, DAOAddress); - const Work1Contract = new web3.eth.Contract(Work1Artifact.abi, Work1Address); - const OnboardingContract = new web3.eth.Contract(OnboardingArtifact.abi, OnboardingAddress); - DAORef.current = DAOContract; - workRef.current = Work1Contract; - onboardingRef.current = OnboardingContract; - - fetchReputation(); - fetchMembers(); - fetchPosts(); - fetchValidationPools(); - - setDAO(DAOContract); - setWork1(Work1Contract); - setOnboarding(OnboardingContract); - - // const fetchReputationInterval = setInterval(() => { - // // console.log('reputation', reputation); - // if (reputation !== undefined) { - // clearInterval(fetchReputationInterval); - // return; - // } - // fetchReputation(); - // }, 1000); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- BEGIN EVENT HANDLERS ------------------------------- */ - /* -------------------------------------------------------------------------------- */ - - DAOContract.events.PostAdded({ fromBlock: 'latest' }).on('data', (event) => { - console.log('event: post added'); - fetchPost(event.returnValues.id); - }); - - DAOContract.events.ValidationPoolInitiated({ fromBlock: 'latest' }).on('data', (event) => { - console.log('event: validation pool initiated'); - fetchValidationPool(event.returnValues.poolIndex); - }); - - DAOContract.events.ValidationPoolResolved({ fromBlock: 'latest' }).on('data', (event) => { - console.log('event: validation pool resolved'); - fetchReputation(); - fetchValidationPool(event.returnValues.poolIndex); - fetchMembers(); - }); - - Work1Contract.events.AvailabilityStaked({ fromBlock: 'latest' }).on('data', () => { - fetchReputation(); - }); - - OnboardingContract.events.AvailabilityStaked({ fromBlock: 'latest' }).on('data', () => { - fetchReputation(); - }); - - return () => { - DAOContract.events.PostAdded().off(); - DAOContract.events.ValidationPoolInitiated().off(); - DAOContract.events.ValidationPoolResolved().off(); - Work1Contract.events.AvailabilityStaked().off(); - OnboardingContract.events.AvailabilityStaked().off(); - }; - }, [provider, account, chainId, balance, dispatchValidationPool, dispatchPost, - DAORef, workRef, onboardingRef, - fetchPost, fetchPosts, fetchReputation, fetchValidationPool, fetchValidationPools, fetchMembers, - ]); - - /* -------------------------------------------------------------------------------- */ - /* --------------------------- END MAIN INITIALIZION EFFECT ----------------------- */ - /* -------------------------------------------------------------------------------- */ useEffect(() => { const { searchParams } = new URL(window.location.href); @@ -286,56 +63,6 @@ function Widget() { } }, [sdk]); - const initiateValidationPool = useCallback(async (postId, poolDuration) => { - const web3 = new Web3(provider); - await DAO.methods.initiateValidationPool( - postId, - poolDuration ?? 3600, - [1, 3], - [1, 2], - 100, - true, - false, - web3.eth.abi.encodeParameter('bytes', '0x00'), - ).send({ - from: account, - gas: 1000000, - value: 10000, - }); - }, [provider, DAO, account]); - - const stake = useCallback(async (poolIndex, amount, inFavor) => { - console.log(`Attempting to stake ${amount} ${inFavor ? 'for' : 'against'} pool ${poolIndex}`); - await DAO.methods.stakeOnValidationPool(poolIndex, amount, inFavor).send({ - from: account, - gas: 999999, - }); - - // Since this is the result we expect from the server, we preemptively set it here. - // We can let this value be negative -- this would just mean we'll be getting - // at least one error from the server, and a corrected reputation. - setReputation((current) => current - BigInt(amount)); - }, [DAO, account, setReputation]); - - const stakeHalfInFavor = useCallback(async (poolIndex) => { - await stake(poolIndex, reputation / BigInt(2), true); - }, [stake, reputation]); - - const evaluateOutcome = useCallback(async (poolIndex) => { - await DAO.methods.evaluateOutcome(poolIndex).send({ - from: account, - gas: 10000000, - }); - }, [DAO, account]); - - const handleShowAddPost = () => setShowAddPost(true); - - const handleShowViewPost = useCallback(async ({ id }) => { - const post = await Post.read(id); - setViewPost(post); - setShowViewPost(true); - }, [setViewPost, setShowViewPost]); - // Sign and send a message const registerMatrixIdentity = useCallback(async () => { const message = new Date().toISOString(); @@ -356,12 +83,7 @@ function Widget() { /* -------------------------------------------------------------------------------- */ return ( - - - - - - + <> {!connected && } {connected && ( @@ -409,210 +131,11 @@ function Widget() { - - -

Members

-
- {`Members count: ${members.length}`} -
-
- - - - - - - - - {members.filter((x) => !!x).map((member) => ( - - - - - ))} - -
IDReputation
{member.id}{member.reputation.toString()}
-
- {' '} -

Posts

-
- -
-
- {`Posts count: ${posts.length}`} -
-
- - - - - - - - - - - - {posts.filter((x) => !!x).map((post) => ( - - - - - - - - ))} - -
IDAuthorsSenderReputationActions
{post.id.toString()} - - {post.authors.map(({ authorAddress, weightPPM }) => ( -
- {getAddressName(chainId, authorAddress)} - {' '} - {Number(weightPPM) / 10000} - % -
- ))} -
-
{getAddressName(chainId, post.sender)}{post.reputation.toString()} - - {' '} - Initiate Validation Pool - {' '} - - {' '} - - {' '} - -
-
-

Validation Pools

-
- {`Validation Pool Count: ${validationPools.length}`} -
-
- - - - - - - - - - - - - - - - - - - - {validationPools.filter((x) => !!x).map((pool) => ( - - - - - - - - - - - - - - - - ))} - -
IDPost IDSenderFeeBindingQuorumWinRatio - Redistribute -
- Losing Stakes -
DurationEnd Time - Stake -
- Count -
StatusActions
{pool.id.toString()}{pool.postId}{getAddressName(chainId, pool.sender)}{pool.fee.toString()} - {pool.params.bindingPercent.toString()} - % - {`${pool.params.quorum[0].toString()}/${pool.params.quorum[1].toString()}`}{`${pool.params.winRatio[0].toString()}/${pool.params.winRatio[1].toString()}`}{pool.params.redistributeLosingStakes.toString()}{pool.params.duration.toString()}{new Date(Number(pool.endTime) * 1000).toLocaleString()}{pool.stakeCount.toString()}{pool.status} - {!pool.resolved && reputation > 0 && pool.timeRemaining > 0 && ( - <> - - {' '} - - {' '} - - )} - {!pool.resolved && (pool.timeRemaining <= 0 || !reputation) && ( - - )} -
-
-
- - {work1 && ( - - )} - {onboarding && ( - - )} - - - {work1 && ( - - )} - - - - - -

Semantic Scholar Import

- - - -
-
+ + )} -
+ ); } diff --git a/frontend/src/components/Proposals.jsx b/frontend/src/components/Proposals.jsx index 21b5f9b..c7d2349 100644 --- a/frontend/src/components/Proposals.jsx +++ b/frontend/src/components/Proposals.jsx @@ -110,7 +110,10 @@ function Proposals() { [{ authorAddress: account, weightPPM: 1000000 }], post.hash, [], // TODO: Proposal can cite posts from matrix, semantic scholar, etc - ); + ).send({ + from: account, + gas: 1000000, + }); // Now submit the post as a proposal await proposalsContract.current.methods.propose( post.hash, diff --git a/frontend/src/components/posts/AddPostModal.jsx b/frontend/src/components/posts/AddPostModal.jsx index 95748a2..27a8fe4 100644 --- a/frontend/src/components/posts/AddPostModal.jsx +++ b/frontend/src/components/posts/AddPostModal.jsx @@ -11,7 +11,7 @@ function AddPostModal({ show, setShow, title, postToBlockchain, onSubmit, }) { const { - provider, DAO, account, + provider, DAORef, account, } = useContext(Web3Context); const [content, setContent] = useState(''); @@ -29,13 +29,13 @@ function AddPostModal({ await post.write(); // If requested, upload the hash to the blockchain if (postToBlockchain) { - await post.publish(DAO, account); + await post.publish(DAORef.current, account); } // If requested, call callback if (onSubmit) { onSubmit(post); } - }, [provider, DAO, account, content, setShow, postToBlockchain, onSubmit]); + }, [provider, DAORef, account, content, setShow, postToBlockchain, onSubmit]); return ( diff --git a/frontend/src/components/tabs/index.jsx b/frontend/src/components/tabs/index.jsx new file mode 100644 index 0000000..4767b6f --- /dev/null +++ b/frontend/src/components/tabs/index.jsx @@ -0,0 +1,308 @@ +import { + useCallback, useState, +} from 'react'; import Button from 'react-bootstrap/Button'; +import { Web3 } from 'web3'; +import Tab from 'react-bootstrap/Tab'; +import Tabs from 'react-bootstrap/Tabs'; +import Stack from 'react-bootstrap/Stack'; + +import WorkContract from '../work-contracts/WorkContract'; +import Proposals from '../Proposals'; +import ImportPaper from '../ImportPaper'; +import ImportPapersByAuthor from '../ImportPapersByAuthor'; +import getAddressName from '../../utils/get-address-name'; +import ImportMatrixEvent from '../ImportMatrixEvent'; +import AddPostModal from '../posts/AddPostModal'; +import ViewPostModal from '../posts/ViewPostModal'; +import Post from '../../utils/Post'; +import useMainContext from '../../contexts/useMainContext'; + +function MainTabs() { + const { + provider, chainId, account, members, reputation, setReputation, posts, validationPools, + DAORef, work1, work2, onboarding, + } = useMainContext(); + + const [showAddPost, setShowAddPost] = useState(false); + const [showViewPost, setShowViewPost] = useState(false); + const [viewPost, setViewPost] = useState({}); + + /* -------------------------------------------------------------------------------- */ + /* --------------------------- BEGIN UI ACTIONS ----------------------------------- */ + /* -------------------------------------------------------------------------------- */ + + const initiateValidationPool = useCallback(async (postId, poolDuration) => { + const web3 = new Web3(provider); + await DAORef.current.methods.initiateValidationPool( + postId, + poolDuration ?? 3600, + [1, 3], + [1, 2], + 100, + true, + false, + web3.eth.abi.encodeParameter('bytes', '0x00'), + ).send({ + from: account, + gas: 1000000, + value: 10000, + }); + }, [provider, DAORef, account]); + + const stake = useCallback(async (poolIndex, amount, inFavor) => { + console.log(`Attempting to stake ${amount} ${inFavor ? 'for' : 'against'} pool ${poolIndex}`); + await DAORef.current.methods.stakeOnValidationPool(poolIndex, amount, inFavor).send({ + from: account, + gas: 999999, + }); + + // Since this is the result we expect from the server, we preemptively set it here. + // We can let this value be negative -- this would just mean we'll be getting + // at least one error from the server, and a corrected reputation. + setReputation((current) => current - BigInt(amount)); + }, [DAORef, account, setReputation]); + + const stakeHalfInFavor = useCallback(async (poolIndex) => { + await stake(poolIndex, reputation / BigInt(2), true); + }, [stake, reputation]); + + const evaluateOutcome = useCallback(async (poolIndex) => { + await DAORef.current.methods.evaluateOutcome(poolIndex).send({ + from: account, + gas: 10000000, + }); + }, [DAORef, account]); + + const handleShowAddPost = () => setShowAddPost(true); + + const handleShowViewPost = useCallback(async ({ id }) => { + const post = await Post.read(id); + setViewPost(post); + setShowViewPost(true); + }, [setViewPost, setShowViewPost]); + + /* -------------------------------------------------------------------------------- */ + /* --------------------------- END UI ACTIONS ------------------------------------- */ + /* -------------------------------------------------------------------------------- */ + + return ( + <> + + + + + + +

Members

+
+ {`Members count: ${members.length}`} +
+
+ + + + + + + + + {members.filter((x) => !!x).map((member) => ( + + + + + ))} + +
IDReputation
{member.id}{member.reputation.toString()}
+
+ {' '} +

Posts

+
+ +
+
+ {`Posts count: ${posts.length}`} +
+
+ + + + + + + + + + + + {posts.filter((x) => !!x).map((post) => ( + + + + + + + + ))} + +
IDAuthorsSenderReputationActions
{post.id.toString()} + + {post.authors.map(({ authorAddress, weightPPM }) => ( +
+ {getAddressName(chainId, authorAddress)} + {' '} + {Number(weightPPM) / 10000} + % +
+ ))} +
+
{getAddressName(chainId, post.sender)}{post.reputation.toString()} + + {' '} + Initiate Validation Pool + {' '} + + {' '} + + {' '} + +
+
+

Validation Pools

+
+ {`Validation Pool Count: ${validationPools.length}`} +
+
+ + + + + + + + + + + + + + + + + + + + {validationPools.filter((x) => !!x).map((pool) => ( + + + + + + + + + + + + + + + + ))} + +
IDPost IDSenderFeeBindingQuorumWinRatio + Redistribute +
+ Losing Stakes +
DurationEnd Time + Stake +
+ Count +
StatusActions
{pool.id.toString()}{pool.postId}{getAddressName(chainId, pool.sender)}{pool.fee.toString()} + {pool.params.bindingPercent.toString()} + % + {`${pool.params.quorum[0].toString()}/${pool.params.quorum[1].toString()}`}{`${pool.params.winRatio[0].toString()}/${pool.params.winRatio[1].toString()}`}{pool.params.redistributeLosingStakes.toString()}{pool.params.duration.toString()}{new Date(Number(pool.endTime) * 1000).toLocaleString()}{pool.stakeCount.toString()}{pool.status} + {!pool.resolved && reputation > 0 && pool.timeRemaining > 0 && ( + <> + + {' '} + + {' '} + + )} + {!pool.resolved && (pool.timeRemaining <= 0 || !reputation) && ( + + )} +
+
+
+ + {work1 && ( + + )} + {onboarding && ( + + )} + {work2 && ( + + )} + + + {work1 && ( + + )} + + + + + +

Semantic Scholar

+ + +

Matrix

+ +
+
+ + ); +} + +export default MainTabs; diff --git a/frontend/src/contexts/MainContextProvider.jsx b/frontend/src/contexts/MainContextProvider.jsx new file mode 100644 index 0000000..eee0978 --- /dev/null +++ b/frontend/src/contexts/MainContextProvider.jsx @@ -0,0 +1,238 @@ +import { + useCallback, useEffect, useState, useMemo, useRef, +} from 'react'; +import { useSDK } from '@metamask/sdk-react'; +import { Web3 } from 'web3'; +import PropTypes from 'prop-types'; + +import Web3Context from './Web3Context'; +import useList from '../utils/List'; +import { getContractAddressByChainId } from '../utils/contract-config'; +import DAOArtifact from '../../contractArtifacts/DAO.json'; +import Work1Artifact from '../../contractArtifacts/Work1.json'; +import OnboardingArtifact from '../../contractArtifacts/Onboarding.json'; +import Work2Artifact from '../../contractArtifacts/Work2.json'; + +function MainContextProvider({ children }) { + const { + sdk, connected, provider, chainId, account, balance, + } = useSDK(); + const [DAO, setDAO] = useState(); + const [work1, setWork1] = useState(); + const [work2, setWork2] = useState(); + const [onboarding, setOnboarding] = useState(); + const DAORef = useRef(); + const [balanceEther, setBalanceEther] = useState(); + const [reputation, setReputation] = useState(); + const [totalReputation, setTotalReputation] = useState(); + const [posts, dispatchPost] = useList(); + const [validationPools, dispatchValidationPool] = useList(); + const [members, dispatchMember] = useList(); + const web3ProviderValue = useMemo(() => ({ + provider, + reputation, + setReputation, + totalReputation, + account, + chainId, + posts, + DAO, + DAORef, + work1, + work2, + onboarding, + members, + validationPools, + balanceEther, + sdk, + connected, + }), [ + provider, reputation, setReputation, account, chainId, posts, balanceEther, totalReputation, + DAO, DAORef, work1, work2, onboarding, members, validationPools, sdk, connected]); + + useEffect(() => { + if (!provider || balance === undefined) return; + const web3 = new Web3(provider); + setBalanceEther(web3.utils.fromWei(balance, 'ether')); + }, [provider, balance]); + + /* -------------------------------------------------------------------------------- */ + /* --------------------------- BEGIN FETCHERS ------------------------------------- */ + /* -------------------------------------------------------------------------------- */ + + const fetchReputation = useCallback(async () => { + setReputation(await DAORef.current.methods.balanceOf(account).call()); + setTotalReputation(await DAORef.current.methods.totalSupply().call()); + }, [DAORef, account]); + + const fetchPost = useCallback(async (postId) => { + const post = await DAORef.current.methods.posts(postId).call(); + post.authors = await DAORef.current.methods.getPostAuthors(postId).call(); + dispatchPost({ type: 'updateById', item: post }); + return post; + }, [DAORef, dispatchPost]); + + const fetchPostId = useCallback(async (postIndex) => { + const postId = await DAORef.current.methods.postIds(postIndex).call(); + return postId; + }, [DAORef]); + + const fetchPosts = useCallback(async () => { + const count = await DAORef.current.methods.postCount().call(); + let promises = []; + dispatchPost({ type: 'refresh' }); + for (let i = 0; i < count; i += 1) { + promises.push(fetchPostId(i)); + } + const postIds = await Promise.all(promises); + promises = []; + postIds.forEach((postId) => { + promises.push(fetchPost(postId)); + }); + }, [DAORef, dispatchPost, fetchPost, fetchPostId]); + + const fetchValidationPool = useCallback(async (poolIndex) => { + const getPoolStatus = (pool) => { + if (pool.resolved) { + return pool.outcome ? 'Accepted' : 'Rejected'; + } + return pool.timeRemaining > 0 ? 'In Progress' : 'Ready to Evaluate'; + }; + const pool = await DAORef.current.methods.validationPools(poolIndex).call(); + pool.id = Number(pool.id); + pool.timeRemaining = new Date(Number(pool.endTime) * 1000) - new Date(); + pool.status = getPoolStatus(pool); + dispatchValidationPool({ type: 'update', item: pool }); + + // When remaing time expires, we want to update the status for this pool + if (pool.timeRemaining > 0) { + setTimeout(() => { + pool.timeRemaining = 0; + pool.status = getPoolStatus(pool); + dispatchValidationPool({ type: 'update', item: pool }); + }, pool.timeRemaining); + } + }, [DAORef, dispatchValidationPool]); + + const fetchValidationPools = useCallback(async () => { + // TODO: Pagination + // TODO: Memoization + // TODO: Caching + const count = await DAORef.current.methods.validationPoolCount().call(); + const promises = []; + dispatchValidationPool({ type: 'refresh' }); + for (let i = 0; i < count; i += 1) { + promises.push(fetchValidationPool(i)); + } + await Promise.all(promises); + }, [DAORef, dispatchValidationPool, fetchValidationPool]); + + const fetchMember = useCallback(async (memberIndex) => { + const id = await DAORef.current.methods.members(memberIndex).call(); + const member = { id }; + member.reputation = await DAORef.current.methods.balanceOf(id).call(); + dispatchMember({ type: 'updateById', item: member }); + return member; + }, [DAORef, dispatchMember]); + + const fetchMembers = useCallback(async () => { + const count = await DAORef.current.methods.memberCount().call(); + const promises = []; + dispatchMember({ type: 'refresh' }); + for (let i = 0; i < count; i += 1) { + promises.push(fetchMember(i)); + } + await Promise.all(promises); + }, [DAORef, dispatchMember, fetchMember]); + + /* -------------------------------------------------------------------------------- */ + /* --------------------------- END FETCHERS --------------------------------------- */ + /* -------------------------------------------------------------------------------- */ + + // In this effect, we initialize everything and add contract event listeners. + useEffect(() => { + if (!provider || !chainId || !account || balance === undefined) return () => {}; + const DAOAddress = getContractAddressByChainId(chainId, 'DAO'); + const Work1Address = getContractAddressByChainId(chainId, 'Work1'); + const OnboardingAddress = getContractAddressByChainId(chainId, 'Onboarding'); + const Work2Address = getContractAddressByChainId(chainId, 'Work2'); + const web3 = new Web3(provider); + DAORef.current = new web3.eth.Contract(DAOArtifact.abi, DAOAddress); + setDAO(DAORef.current); + const work1Contract = new web3.eth.Contract(Work1Artifact.abi, Work1Address); + setWork1(work1Contract); + const onboardingContract = new web3.eth.Contract(OnboardingArtifact.abi, OnboardingAddress); + setOnboarding(onboardingContract); + const work2Contract = new web3.eth.Contract(Work2Artifact.abi, Work2Address); + setWork2(work2Contract); + + fetchReputation(); + fetchMembers(); + fetchPosts(); + fetchValidationPools(); + + // const fetchReputationInterval = setInterval(() => { + // // console.log('reputation', reputation); + // if (reputation !== undefined) { + // clearInterval(fetchReputationInterval); + // return; + // } + // fetchReputation(); + // }, 1000); + + /* -------------------------------------------------------------------------------- */ + /* --------------------------- BEGIN EVENT HANDLERS ------------------------------- */ + /* -------------------------------------------------------------------------------- */ + + DAORef.current.events.PostAdded({ fromBlock: 'latest' }).on('data', (event) => { + console.log('event: post added'); + fetchPost(event.returnValues.id); + }); + + DAORef.current.events.ValidationPoolInitiated({ fromBlock: 'latest' }).on('data', (event) => { + console.log('event: validation pool initiated'); + fetchValidationPool(event.returnValues.poolIndex); + }); + + DAORef.current.events.ValidationPoolResolved({ fromBlock: 'latest' }).on('data', (event) => { + console.log('event: validation pool resolved'); + fetchReputation(); + fetchValidationPool(event.returnValues.poolIndex); + fetchMembers(); + }); + + work1Contract.events.AvailabilityStaked({ fromBlock: 'latest' }).on('data', () => { + fetchReputation(); + }); + + onboardingContract.events.AvailabilityStaked({ fromBlock: 'latest' }).on('data', () => { + fetchReputation(); + }); + + return () => { + DAORef.current.events.PostAdded().off(); + DAORef.current.events.ValidationPoolInitiated().off(); + DAORef.current.events.ValidationPoolResolved().off(); + work1Contract.events.AvailabilityStaked().off(); + onboardingContract.events.AvailabilityStaked().off(); + }; + }, [provider, account, chainId, balance, dispatchValidationPool, dispatchPost, + DAORef, setDAO, setWork1, setOnboarding, setWork2, + fetchPost, fetchPosts, fetchReputation, fetchValidationPool, fetchValidationPools, fetchMembers, + ]); + + /* -------------------------------------------------------------------------------- */ + /* --------------------------- END MAIN INITIALIZION EFFECT ----------------------- */ + /* -------------------------------------------------------------------------------- */ + return ( + + {children} + + ); +} + +MainContextProvider.propTypes = { + children: PropTypes.node.isRequired, +}; + +export default MainContextProvider; diff --git a/frontend/src/contexts/useMainContext.js b/frontend/src/contexts/useMainContext.js new file mode 100644 index 0000000..a9e6ae0 --- /dev/null +++ b/frontend/src/contexts/useMainContext.js @@ -0,0 +1,9 @@ +import { useContext } from 'react'; + +import Web3Context from './Web3Context'; + +function useMainContext() { + return useContext(Web3Context); +} + +export default useMainContext; diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index 92f4b1c..3822dd0 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -10,6 +10,7 @@ import { import WebApp from './WebApp'; import Widget from './Widget'; +import MainContextProvider from './contexts/MainContextProvider'; const router = createBrowserRouter([ { @@ -37,7 +38,9 @@ ReactDOM.createRoot(document.getElementById('root')).render( }, }} > - + + + , );