608060405234801561000f575f80fd5b50336040518060400160405280600881526020017f55736463426173650000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5553444300000000000000000000000000000000000000000000000000000000815250816003908161008c91906106db565b50806004908161009c91906106db565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361010f575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161010691906107e9565b60405180910390fd5b61011e8161014060201b60201c565b5061013b336b033b2e3c9fd0803ce800000061020360201b60201c565b6108bf565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610273575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161026a91906107e9565b60405180910390fd5b6102845f838361028860201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036102d8578060025f8282546102cc919061082f565b925050819055506103a6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610361578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161035893929190610871565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103ed578060025f8282540392505081905550610437565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161049491906108a6565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061051c57607f821691505b60208210810361052f5761052e6104d8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026105917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610556565b61059b8683610556565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6105df6105da6105d5846105b3565b6105bc565b6105b3565b9050919050565b5f819050919050565b6105f8836105c5565b61060c610604826105e6565b848454610562565b825550505050565b5f90565b610620610614565b61062b8184846105ef565b505050565b5b8181101561064e576106435f82610618565b600181019050610631565b5050565b601f8211156106935761066481610535565b61066d84610547565b8101602085101561067c578190505b61069061068885610547565b830182610630565b50505b505050565b5f82821c905092915050565b5f6106b35f1984600802610698565b1980831691505092915050565b5f6106cb83836106a4565b9150826002028217905092915050565b6106e4826104a1565b67ffffffffffffffff8111156106fd576106fc6104ab565b5b6107078254610505565b610712828285610652565b5f60209050601f831160018114610743575f8415610731578287015190505b61073b85826106c0565b8655506107a2565b601f19841661075186610535565b5f5b8281101561077857848901518255600182019150602085019450602081019050610753565b868310156107955784890151610791601f8916826106a4565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6107d3826107aa565b9050919050565b6107e3816107c9565b82525050565b5f6020820190506107fc5f8301846107da565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610839826105b3565b9150610844836105b3565b925082820190508082111561085c5761085b610802565b5b92915050565b61086b816105b3565b82525050565b5f6060820190506108845f8301866107da565b6108916020830185610862565b61089e6040830184610862565b949350505050565b5f6020820190506108b95f830184610862565b92915050565b61113d806108cc5f395ff3fe608060405234801561000f575f80fd5b50600436106100cd575f3560e01c806370a082311161008a57806395d89b411161006457806395d89b41146101ff578063a9059cbb1461021d578063dd62ed3e1461024d578063f2fde38b1461027d576100cd565b806370a08231146101a7578063715018a6146101d75780638da5cb5b146101e1576100cd565b806306fdde03146100d1578063095ea7b3146100ef57806318160ddd1461011f57806323b872dd1461013d578063313ce5671461016d57806342966c681461018b575b5f80fd5b6100d9610299565b6040516100e69190610d8b565b60405180910390f35b61010960048036038101906101049190610e3c565b610329565b6040516101169190610e94565b60405180910390f35b61012761034b565b6040516101349190610ebc565b60405180910390f35b61015760048036038101906101529190610ed5565b610354565b6040516101649190610e94565b60405180910390f35b610175610382565b6040516101829190610f40565b60405180910390f35b6101a560048036038101906101a09190610f59565b61038a565b005b6101c160048036038101906101bc9190610f84565b610397565b6040516101ce9190610ebc565b60405180910390f35b6101df6103dc565b005b6101e96103ef565b6040516101f69190610fbe565b60405180910390f35b610207610417565b6040516102149190610d8b565b60405180910390f35b61023760048036038101906102329190610e3c565b6104a7565b6040516102449190610e94565b60405180910390f35b61026760048036038101906102629190610fd7565b6104c9565b6040516102749190610ebc565b60405180910390f35b61029760048036038101906102929190610f84565b61054b565b005b6060600380546102a890611042565b80601f01602080910402602001604051908101604052809291908181526020018280546102d490611042565b801561031f5780601f106102f65761010080835404028352916020019161031f565b820191905f5260205f20905b81548152906001019060200180831161030257829003601f168201915b5050505050905090565b5f806103336105cf565b90506103408185856105d6565b600191505092915050565b5f600254905090565b5f8061035e6105cf565b905061036b8582856105e8565b61037685858561067a565b60019150509392505050565b5f6012905090565b610394338261076a565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6103e46107e9565b6103ed5f610870565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461042690611042565b80601f016020809104026020016040519081016040528092919081815260200182805461045290611042565b801561049d5780601f106104745761010080835404028352916020019161049d565b820191905f5260205f20905b81548152906001019060200180831161048057829003601f168201915b5050505050905090565b5f806104b16105cf565b90506104be81858561067a565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6105536107e9565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036105c3575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016105ba9190610fbe565b60405180910390fd5b6105cc81610870565b50565b5f33905090565b6105e38383836001610933565b505050565b5f6105f384846104c9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106745781811015610665578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161065c93929190611072565b60405180910390fd5b61067384848484035f610933565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036106ea575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016106e19190610fbe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361075a575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107519190610fbe565b60405180910390fd5b610765838383610b02565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107da575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107d19190610fbe565b60405180910390fd5b6107e5825f83610b02565b5050565b6107f16105cf565b73ffffffffffffffffffffffffffffffffffffffff1661080f6103ef565b73ffffffffffffffffffffffffffffffffffffffff161461086e576108326105cf565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016108659190610fbe565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036109a3575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161099a9190610fbe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610a13575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401610a0a9190610fbe565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610afc578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610af39190610ebc565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b52578060025f828254610b4691906110d4565b92505081905550610c20565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610bdb578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610bd293929190611072565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c67578060025f8282540392505081905550610cb1565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610d0e9190610ebc565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610d5d82610d1b565b610d678185610d25565b9350610d77818560208601610d35565b610d8081610d43565b840191505092915050565b5f6020820190508181035f830152610da38184610d53565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610dd882610daf565b9050919050565b610de881610dce565b8114610df2575f80fd5b50565b5f81359050610e0381610ddf565b92915050565b5f819050919050565b610e1b81610e09565b8114610e25575f80fd5b50565b5f81359050610e3681610e12565b92915050565b5f8060408385031215610e5257610e51610dab565b5b5f610e5f85828601610df5565b9250506020610e7085828601610e28565b9150509250929050565b5f8115159050919050565b610e8e81610e7a565b82525050565b5f602082019050610ea75f830184610e85565b92915050565b610eb681610e09565b82525050565b5f602082019050610ecf5f830184610ead565b92915050565b5f805f60608486031215610eec57610eeb610dab565b5b5f610ef986828701610df5565b9350506020610f0a86828701610df5565b9250506040610f1b86828701610e28565b9150509250925092565b5f60ff82169050919050565b610f3a81610f25565b82525050565b5f602082019050610f535f830184610f31565b92915050565b5f60208284031215610f6e57610f6d610dab565b5b5f610f7b84828501610e28565b91505092915050565b5f60208284031215610f9957610f98610dab565b5b5f610fa684828501610df5565b91505092915050565b610fb881610dce565b82525050565b5f602082019050610fd15f830184610faf565b92915050565b5f8060408385031215610fed57610fec610dab565b5b5f610ffa85828601610df5565b925050602061100b85828601610df5565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061105957607f821691505b60208210810361106c5761106b611015565b5b50919050565b5f6060820190506110855f830186610faf565b6110926020830185610ead565b61109f6040830184610ead565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6110de82610e09565b91506110e983610e09565b9250828201905080821115611101576111006110a7565b5b9291505056fea2646970667358221220d12e334f837a0f7e8639f3b35a246fed75624643c818f1e728545f36d96bedff64736f6c634300081a0033