6080604052662386f26fc1000060035534801561001a575f80fd5b50604051611c8a380380611c8a833981810160405281019061003c91906101ef565b815f908161004a9190610472565b50806001908161005a9190610472565b503360025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050610541565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610101826100bb565b810181811067ffffffffffffffff821117156101205761011f6100cb565b5b80604052505050565b5f6101326100a2565b905061013e82826100f8565b919050565b5f67ffffffffffffffff82111561015d5761015c6100cb565b5b610166826100bb565b9050602081019050919050565b8281835e5f83830152505050565b5f61019361018e84610143565b610129565b9050828152602081018484840111156101af576101ae6100b7565b5b6101ba848285610173565b509392505050565b5f82601f8301126101d6576101d56100b3565b5b81516101e6848260208601610181565b91505092915050565b5f8060408385031215610205576102046100ab565b5b5f83015167ffffffffffffffff811115610222576102216100af565b5b61022e858286016101c2565b925050602083015167ffffffffffffffff81111561024f5761024e6100af565b5b61025b858286016101c2565b9150509250929050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806102b357607f821691505b6020821081036102c6576102c561026f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026103287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826102ed565b61033286836102ed565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61037661037161036c8461034a565b610353565b61034a565b9050919050565b5f819050919050565b61038f8361035c565b6103a361039b8261037d565b8484546102f9565b825550505050565b5f90565b6103b76103ab565b6103c2818484610386565b505050565b5b818110156103e5576103da5f826103af565b6001810190506103c8565b5050565b601f82111561042a576103fb816102cc565b610404846102de565b81016020851015610413578190505b61042761041f856102de565b8301826103c7565b50505b505050565b5f82821c905092915050565b5f61044a5f198460080261042f565b1980831691505092915050565b5f610462838361043b565b9150826002028217905092915050565b61047b82610265565b67ffffffffffffffff811115610494576104936100cb565b5b61049e825461029c565b6104a98282856103e9565b5f60209050601f8311600181146104da575f84156104c8578287015190505b6104d28582610457565b865550610539565b601f1984166104e8866102cc565b5f5b8281101561050f578489015182556001820191506020850194506020810190506104ea565b8683101561052c5784890151610528601f89168261043b565b8355505b6001600288020188555050505b505050505050565b61173c8061054e5f395ff3fe608060405260043610610090575f3560e01c806370a082311161005857806370a0823114610172578063a22cb465146101ae578063c37b9bcd146101d6578063c588ff8b146101e0578063e985e9c51461021c57610090565b8063081812fc14610094578063095ea7b3146100d057806323b872dd146100f85780633ccfd60b146101205780636352211e14610136575b5f80fd5b34801561009f575f80fd5b506100ba60048036038101906100b59190610ed6565b610258565b6040516100c79190610f40565b60405180910390f35b3480156100db575f80fd5b506100f660048036038101906100f19190610f83565b6103cd565b005b348015610103575f80fd5b5061011e60048036038101906101199190610fc1565b610597565b005b34801561012b575f80fd5b506101346107dc565b005b348015610141575f80fd5b5061015c60048036038101906101579190610ed6565b6108d2565b6040516101699190610f40565b60405180910390f35b34801561017d575f80fd5b5061019860048036038101906101939190611011565b61090b565b6040516101a5919061104b565b60405180910390f35b3480156101b9575f80fd5b506101d460048036038101906101cf9190611099565b6109bf565b005b6101de610b25565b005b3480156101eb575f80fd5b5061020660048036038101906102019190610ed6565b610b74565b60405161021391906110f5565b60405180910390f35b348015610227575f80fd5b50610242600480360381019061023d919061110e565b610b9d565b60405161024f919061115b565b60405180910390f35b5f3373ffffffffffffffffffffffffffffffffffffffff1660055f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036102f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102ee906111ce565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f8481526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610395576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161038c90611236565b60405180910390fd5b60075f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b8173ffffffffffffffffffffffffffffffffffffffff166103ed826108d2565b73ffffffffffffffffffffffffffffffffffffffff1603610443576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043a9061129e565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff1660055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d890611306565b60405180910390fd5b8160075f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16610551836108d2565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610605576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105fc9061136e565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16610625826108d2565b73ffffffffffffffffffffffffffffffffffffffff161461067b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610672906113d6565b60405180910390fd5b6106855f826103cd565b600160065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546106d29190611421565b92505081905550600160065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546107269190611454565b925050819055508160055f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461086b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610862906114f7565b60405180910390fd5b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156108cf573d5f803e3d5ffd5b50565b5f60055f8381526020019081526020015f205f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b5f8073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361097a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109719061136e565b60405180910390fd5b60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a249061155f565b60405180910390fd5b8060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610b19919061115b565b60405180910390a35050565b6003543414610b69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b60906115c7565b60405180910390fd5b610b7233610c2b565b565b5f60085f8381526020019081526020015f205f9054906101000a900463ffffffff169050919050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c909061162f565b60405180910390fd5b600160045f828254610cab9190611454565b925050819055505f6004549050600160065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d059190611454565b925050819055508160055f8381526020019081526020015f205f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d63610df0565b60085f8381526020019081526020015f205f6101000a81548163ffffffff021916908363ffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b5f80610210610dfd610e6a565b610e07919061167a565b90505f80600190505f5b60208163ffffffff161015610e5e578183610e2c9190611454565b9250600182610e3b9190611454565b915083831115610e515780945050505050610e67565b8080600101915050610e11565b50601f93505050505b90565b5f4442600454604051602001610e82939291906116ca565b604051602081830303815290604052805190602001205f1c905090565b5f80fd5b5f819050919050565b610eb581610ea3565b8114610ebf575f80fd5b50565b5f81359050610ed081610eac565b92915050565b5f60208284031215610eeb57610eea610e9f565b5b5f610ef884828501610ec2565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f2a82610f01565b9050919050565b610f3a81610f20565b82525050565b5f602082019050610f535f830184610f31565b92915050565b610f6281610f20565b8114610f6c575f80fd5b50565b5f81359050610f7d81610f59565b92915050565b5f8060408385031215610f9957610f98610e9f565b5b5f610fa685828601610f6f565b9250506020610fb785828601610ec2565b9150509250929050565b5f805f60608486031215610fd857610fd7610e9f565b5b5f610fe586828701610f6f565b9350506020610ff686828701610f6f565b925050604061100786828701610ec2565b9150509250925092565b5f6020828403121561102657611025610e9f565b5b5f61103384828501610f6f565b91505092915050565b61104581610ea3565b82525050565b5f60208201905061105e5f83018461103c565b92915050565b5f8115159050919050565b61107881611064565b8114611082575f80fd5b50565b5f813590506110938161106f565b92915050565b5f80604083850312156110af576110ae610e9f565b5b5f6110bc85828601610f6f565b92505060206110cd85828601611085565b9150509250929050565b5f63ffffffff82169050919050565b6110ef816110d7565b82525050565b5f6020820190506111085f8301846110e6565b92915050565b5f806040838503121561112457611123610e9f565b5b5f61113185828601610f6f565b925050602061114285828601610f6f565b9150509250929050565b61115581611064565b82525050565b5f60208201905061116e5f83018461114c565b92915050565b5f82825260208201905092915050565b7f43616e27742067657420617070726f76616c20666f722073656c662e000000005f82015250565b5f6111b8601c83611174565b91506111c382611184565b602082019050919050565b5f6020820190508181035f8301526111e5816111ac565b9050919050565b7f546f6b656e20494420646f6573206e6f742065786973742e00000000000000005f82015250565b5f611220601883611174565b915061122b826111ec565b602082019050919050565b5f6020820190508181035f83015261124d81611214565b9050919050565b7f43616e277420617070726f766520746f2073656c662e000000000000000000005f82015250565b5f611288601683611174565b915061129382611254565b602082019050919050565b5f6020820190508181035f8301526112b58161127c565b9050919050565b7f4e6f7420616e206f776e65722e000000000000000000000000000000000000005f82015250565b5f6112f0600d83611174565b91506112fb826112bc565b602082019050919050565b5f6020820190508181035f83015261131d816112e4565b9050919050565b7f43616e2774206861766520616464726573732030206173206f776e65722e00005f82015250565b5f611358601e83611174565b915061136382611324565b602082019050919050565b5f6020820190508181035f8301526113858161134c565b9050919050565b7f496e636f727265637420696e697469616c206f776e65722e00000000000000005f82015250565b5f6113c0601883611174565b91506113cb8261138c565b602082019050919050565b5f6020820190508181035f8301526113ed816113b4565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61142b82610ea3565b915061143683610ea3565b925082820390508181111561144e5761144d6113f4565b5b92915050565b5f61145e82610ea3565b915061146983610ea3565b9250828201905080821115611481576114806113f4565b5b92915050565b7f4f6e6c79206f776e65722063616e2063616c6c20746869732066756e6374696f5f8201527f6e2e000000000000000000000000000000000000000000000000000000000000602082015250565b5f6114e1602283611174565b91506114ec82611487565b604082019050919050565b5f6020820190508181035f83015261150e816114d5565b9050919050565b7f43616e27742073657420617070726f76616c20666f722073656c662e000000005f82015250565b5f611549601c83611174565b915061155482611515565b602082019050919050565b5f6020820190508181035f8301526115768161153d565b9050919050565b7f57726f6e67207061796d656e7420616d6f756e742e00000000000000000000005f82015250565b5f6115b1601583611174565b91506115bc8261157d565b602082019050919050565b5f6020820190508181035f8301526115de816115a5565b9050919050565b7f43616e6e6f74206d696e7420746f207a65726f2e0000000000000000000000005f82015250565b5f611619601483611174565b9150611624826115e5565b602082019050919050565b5f6020820190508181035f8301526116468161160d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61168482610ea3565b915061168f83610ea3565b92508261169f5761169e61164d565b5b828206905092915050565b5f819050919050565b6116c46116bf82610ea3565b6116aa565b82525050565b5f6116d582866116b3565b6020820191506116e582856116b3565b6020820191506116f582846116b3565b60208201915081905094935050505056fea2646970667358221220fff064009126d923f44b0112cb353d318c88f4927c438b583c76db557cc57c4b64736f6c6343000819003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000b536b6174657253686f74730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003534b540000000000000000000000000000000000000000000000000000000000