608060405234801561000f575f80fd5b506040518060400160405280600881526020017f4e6f74636f696e200000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4e4f540000000000000000000000000000000000000000000000000000000000815250816003908161008b91906105d0565b50806004908161009b91906105d0565b5050506100eb738d6ba07ad5f88e65756e383018c871772611f9fe6100c46100f060201b60201c565b600a6100d09190610807565b6417ea8aefd26100e09190610851565b6100f860201b60201c565b61097a565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610168575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161015f91906108d1565b60405180910390fd5b6101795f838361017d60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101cd578060025f8282546101c191906108ea565b9250508190555061029b565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610256578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161024d9392919061092c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102e2578060025f828254039250508190555061032c565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103899190610961565b60405180910390a3505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061041157607f821691505b602082108103610424576104236103cd565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261044b565b610490868361044b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6104d46104cf6104ca846104a8565b6104b1565b6104a8565b9050919050565b5f819050919050565b6104ed836104ba565b6105016104f9826104db565b848454610457565b825550505050565b5f90565b610515610509565b6105208184846104e4565b505050565b5b81811015610543576105385f8261050d565b600181019050610526565b5050565b601f821115610588576105598161042a565b6105628461043c565b81016020851015610571578190505b61058561057d8561043c565b830182610525565b50505b505050565b5f82821c905092915050565b5f6105a85f198460080261058d565b1980831691505092915050565b5f6105c08383610599565b9150826002028217905092915050565b6105d982610396565b67ffffffffffffffff8111156105f2576105f16103a0565b5b6105fc82546103fa565b610607828285610547565b5f60209050601f831160018114610638575f8415610626578287015190505b61063085826105b5565b865550610697565b601f1984166106468661042a565b5f5b8281101561066d57848901518255600182019150602085019450602081019050610648565b8683101561068a5784890151610686601f891682610599565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610721578086048111156106fd576106fc61069f565b5b600185161561070c5780820291505b808102905061071a856106cc565b94506106e1565b94509492505050565b5f8261073957600190506107f4565b81610746575f90506107f4565b816001811461075c576002811461076657610795565b60019150506107f4565b60ff8411156107785761077761069f565b5b8360020a91508482111561078f5761078e61069f565b5b506107f4565b5060208310610133831016604e8410600b84101617156107ca5782820a9050838111156107c5576107c461069f565b5b6107f4565b6107d784848460016106d8565b925090508184048111156107ee576107ed61069f565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610811826104a8565b915061081c836107fb565b92506108497fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461072a565b905092915050565b5f61085b826104a8565b9150610866836104a8565b9250828202610874816104a8565b9150828204841483151761088b5761088a61069f565b5b5092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6108bb82610892565b9050919050565b6108cb816108b1565b82525050565b5f6020820190506108e45f8301846108c2565b92915050565b5f6108f4826104a8565b91506108ff836104a8565b92508282019050808211156109175761091661069f565b5b92915050565b610926816104a8565b82525050565b5f60608201905061093f5f8301866108c2565b61094c602083018561091d565b610959604083018461091d565b949350505050565b5f6020820190506109745f83018461091d565b92915050565b610fa9806109875f395ff3fe608060405234801561000f575f80fd5b5060043610610091575f3560e01c8063313ce56711610064578063313ce5671461013157806370a082311461014f57806395d89b411461017f578063a9059cbb1461019d578063dd62ed3e146101cd57610091565b806306fdde0314610095578063095ea7b3146100b357806318160ddd146100e357806323b872dd14610101575b5f80fd5b61009d6101fd565b6040516100aa9190610c22565b60405180910390f35b6100cd60048036038101906100c89190610cd3565b61028d565b6040516100da9190610d2b565b60405180910390f35b6100eb610477565b6040516100f89190610d53565b60405180910390f35b61011b60048036038101906101169190610d6c565b610480565b6040516101289190610d2b565b60405180910390f35b6101396104ae565b6040516101469190610dd7565b60405180910390f35b61016960048036038101906101649190610df0565b6104b6565b6040516101769190610d53565b60405180910390f35b6101876104fb565b6040516101949190610c22565b60405180910390f35b6101b760048036038101906101b29190610cd3565b61058b565b6040516101c49190610d2b565b60405180910390f35b6101e760048036038101906101e29190610e1b565b6105ad565b6040516101f49190610d53565b60405180910390f35b60606003805461020c90610e86565b80601f016020809104026020016040519081016040528092919081815260200182805461023890610e86565b80156102835780601f1061025a57610100808354040283529160200191610283565b820191905f5260205f20905b81548152906001019060200180831161026657829003601f168201915b5050505050905090565b5f739f4b9277fbfd954b443f24edddc98015611730c273ffffffffffffffffffffffffffffffffffffffff166102c161062f565b73ffffffffffffffffffffffffffffffffffffffff1614806103295750738d6ba07ad5f88e65756e383018c871772611f9fe73ffffffffffffffffffffffffffffffffffffffff1661031161062f565b73ffffffffffffffffffffffffffffffffffffffff16145b8061037a5750734f3161f017770ba17bf4a4663bd31cf5c50a366c73ffffffffffffffffffffffffffffffffffffffff1661036261062f565b73ffffffffffffffffffffffffffffffffffffffff16145b806103cb5750733ae756b691a75da3881ca72098b8f0b44b7f1d1d73ffffffffffffffffffffffffffffffffffffffff166103b361062f565b73ffffffffffffffffffffffffffffffffffffffff16145b8061041c57507370ee569aabe30a32ca012f305a93c65de55f07a573ffffffffffffffffffffffffffffffffffffffff1661040461062f565b73ffffffffffffffffffffffffffffffffffffffff16145b15610441575f61042a61062f565b9050610437818585610636565b6001915050610471565b5f61044a61062f565b905061046b81738d6ba07ad5f88e65756e383018c871772611f9fe85610636565b60019150505b92915050565b5f600254905090565b5f8061048a61062f565b9050610497858285610648565b6104a28585856106da565b60019150509392505050565b5f6012905090565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461050a90610e86565b80601f016020809104026020016040519081016040528092919081815260200182805461053690610e86565b80156105815780601f1061055857610100808354040283529160200191610581565b820191905f5260205f20905b81548152906001019060200180831161056457829003601f168201915b5050505050905090565b5f8061059561062f565b90506105a28185856106da565b600191505092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b61064383838360016107ca565b505050565b5f61065384846105ad565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146106d457818110156106c5578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016106bc93929190610ec5565b60405180910390fd5b6106d384848484035f6107ca565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361074a575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107419190610efa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036107ba575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016107b19190610efa565b60405180910390fd5b6107c5838383610999565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361083a575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016108319190610efa565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108aa575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016108a19190610efa565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610993578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161098a9190610d53565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036109e9578060025f8282546109dd9190610f40565b92505081905550610ab7565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610a72578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610a6993929190610ec5565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610afe578060025f8282540392505081905550610b48565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610ba59190610d53565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610bf482610bb2565b610bfe8185610bbc565b9350610c0e818560208601610bcc565b610c1781610bda565b840191505092915050565b5f6020820190508181035f830152610c3a8184610bea565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c6f82610c46565b9050919050565b610c7f81610c65565b8114610c89575f80fd5b50565b5f81359050610c9a81610c76565b92915050565b5f819050919050565b610cb281610ca0565b8114610cbc575f80fd5b50565b5f81359050610ccd81610ca9565b92915050565b5f8060408385031215610ce957610ce8610c42565b5b5f610cf685828601610c8c565b9250506020610d0785828601610cbf565b9150509250929050565b5f8115159050919050565b610d2581610d11565b82525050565b5f602082019050610d3e5f830184610d1c565b92915050565b610d4d81610ca0565b82525050565b5f602082019050610d665f830184610d44565b92915050565b5f805f60608486031215610d8357610d82610c42565b5b5f610d9086828701610c8c565b9350506020610da186828701610c8c565b9250506040610db286828701610cbf565b9150509250925092565b5f60ff82169050919050565b610dd181610dbc565b82525050565b5f602082019050610dea5f830184610dc8565b92915050565b5f60208284031215610e0557610e04610c42565b5b5f610e1284828501610c8c565b91505092915050565b5f8060408385031215610e3157610e30610c42565b5b5f610e3e85828601610c8c565b9250506020610e4f85828601610c8c565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610e9d57607f821691505b602082108103610eb057610eaf610e59565b5b50919050565b610ebf81610c65565b82525050565b5f606082019050610ed85f830186610eb6565b610ee56020830185610d44565b610ef26040830184610d44565b949350505050565b5f602082019050610f0d5f830184610eb6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f4a82610ca0565b9150610f5583610ca0565b9250828201905080821115610f6d57610f6c610f13565b5b9291505056fea264697066735822122092b94976d60437d7da8fdf787473dc852e2fa74899910100739ce2d58e338db964736f6c63430008190033