0x608060405234801561000f575f80fd5b5060405161180f38038061180f833981810160405281019061003191906103aa565b6040518060400160405280600681526020017f50696572636500000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f505243000000000000000000000000000000000000000000000000000000000081525081600390816100ac9190610606565b5080600490816100bc9190610606565b5050506100cf33826100d560201b60201c565b506107ea565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610145575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040161013c9190610714565b60405180910390fd5b6101565f838361015a60201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036101aa578060025f82825461019e919061075a565b92505081905550610278565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610233578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161022a9392919061079c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036102bf578060025f8282540392505081905550610309565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161036691906107d1565b60405180910390a3505050565b5f80fd5b5f819050919050565b61038981610377565b8114610393575f80fd5b50565b5f815190506103a481610380565b92915050565b5f602082840312156103bf576103be610373565b5b5f6103cc84828501610396565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061045057607f821691505b6020821081036104635761046261040c565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026104c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261048a565b6104cf868361048a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f61050a61050561050084610377565b6104e7565b610377565b9050919050565b5f819050919050565b610523836104f0565b61053761052f82610511565b848454610496565b825550505050565b5f90565b61054b61053f565b61055681848461051a565b505050565b5b818110156105795761056e5f82610543565b60018101905061055c565b5050565b601f8211156105be5761058f81610469565b6105988461047b565b810160208510156105a7578190505b6105bb6105b38561047b565b83018261055b565b50505b505050565b5f82821c905092915050565b5f6105de5f19846008026105c3565b1980831691505092915050565b5f6105f683836105cf565b9150826002028217905092915050565b61060f826103d5565b67ffffffffffffffff811115610628576106276103df565b5b6106328254610439565b61063d82828561057d565b5f60209050601f83116001811461066e575f841561065c578287015190505b61066685826105eb565b8655506106cd565b601f19841661067c86610469565b5f5b828110156106a35784890151825560018201915060208501945060208101905061067e565b868310156106c057848901516106bc601f8916826105cf565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6106fe826106d5565b9050919050565b61070e816106f4565b82525050565b5f6020820190506107275f830184610705565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61076482610377565b915061076f83610377565b92508282019050808211156107875761078661072d565b5b92915050565b61079681610377565b82525050565b5f6060820190506107af5f830186610705565b6107bc602083018561078d565b6107c9604083018461078d565b949350505050565b5f6020820190506107e45f83018461078d565b92915050565b611018806107f75f395ff3fe608060405234801561000f575f80fd5b50600436106100b2575f3560e01c806370a082311161006f57806370a082311461018c57806395d89b41146101bc5780639b96eece146101da5780639dc29fac1461020a578063a9059cbb14610226578063dd62ed3e14610256576100b2565b806306fdde03146100b6578063095ea7b3146100d457806318160ddd1461010457806323b872dd14610122578063313ce5671461015257806340c10f1914610170575b5f80fd5b6100be610286565b6040516100cb9190610bd0565b60405180910390f35b6100ee60048036038101906100e99190610c81565b610316565b6040516100fb9190610cd9565b60405180910390f35b61010c610333565b6040516101199190610d01565b60405180910390f35b61013c60048036038101906101379190610d1a565b61033c565b6040516101499190610cd9565b60405180910390f35b61015a6103c8565b6040516101679190610d85565b60405180910390f35b61018a60048036038101906101859190610c81565b6103d0565b005b6101a660048036038101906101a19190610d9e565b6103de565b6040516101b39190610d01565b60405180910390f35b6101c4610423565b6040516101d19190610bd0565b60405180910390f35b6101f460048036038101906101ef9190610d9e565b6104b3565b6040516102019190610d01565b60405180910390f35b610224600480360381019061021f9190610c81565b6104c4565b005b610240600480360381019061023b9190610c81565b6104d2565b60405161024d9190610cd9565b60405180910390f35b610270600480360381019061026b9190610dc9565b6104ef565b60405161027d9190610d01565b60405180910390f35b60606003805461029590610e34565b80601f01602080910402602001604051908101604052809291908181526020018280546102c190610e34565b801561030c5780601f106102e35761010080835404028352916020019161030c565b820191905f5260205f20905b8154815290600101906020018083116102ef57829003601f168201915b5050505050905090565b5f610329610322610571565b8484610578565b6001905092915050565b5f600254905090565b5f61034884848461058a565b5f61035a85610355610571565b6104ef565b90508281101561039f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039690610ed4565b60405180910390fd5b6103bc856103ab610571565b85846103b79190610f1f565b610578565b60019150509392505050565b5f6012905090565b6103da828261067a565b5050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60606004805461043290610e34565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90610e34565b80156104a95780601f10610480576101008083540402835291602001916104a9565b820191905f5260205f20905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b5f6104bd826103de565b9050919050565b6104ce82826106f9565b5050565b5f6104e56104de610571565b848461058a565b6001905092915050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f33905090565b6105858383836001610778565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036105fa575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016105f19190610f61565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361066a575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106619190610f61565b60405180910390fd5b610675838383610947565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036106ea575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016106e19190610f61565b60405180910390fd5b6106f55f8383610947565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610769575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016107609190610f61565b60405180910390fd5b610774825f83610947565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036107e8575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016107df9190610f61565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610858575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161084f9190610f61565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015610941578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516109389190610d01565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610997578060025f82825461098b9190610f7a565b92505081905550610a65565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015610a20578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401610a1793929190610fad565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aac578060025f8282540392505081905550610af6565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b539190610d01565b60405180910390a3505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610ba282610b60565b610bac8185610b6a565b9350610bbc818560208601610b7a565b610bc581610b88565b840191505092915050565b5f6020820190508181035f830152610be88184610b98565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610c1d82610bf4565b9050919050565b610c2d81610c13565b8114610c37575f80fd5b50565b5f81359050610c4881610c24565b92915050565b5f819050919050565b610c6081610c4e565b8114610c6a575f80fd5b50565b5f81359050610c7b81610c57565b92915050565b5f8060408385031215610c9757610c96610bf0565b5b5f610ca485828601610c3a565b9250506020610cb585828601610c6d565b9150509250929050565b5f8115159050919050565b610cd381610cbf565b82525050565b5f602082019050610cec5f830184610cca565b92915050565b610cfb81610c4e565b82525050565b5f602082019050610d145f830184610cf2565b92915050565b5f805f60608486031215610d3157610d30610bf0565b5b5f610d3e86828701610c3a565b9350506020610d4f86828701610c3a565b9250506040610d6086828701610c6d565b9150509250925092565b5f60ff82169050919050565b610d7f81610d6a565b82525050565b5f602082019050610d985f830184610d76565b92915050565b5f60208284031215610db357610db2610bf0565b5b5f610dc084828501610c3a565b91505092915050565b5f8060408385031215610ddf57610dde610bf0565b5b5f610dec85828601610c3a565b9250506020610dfd85828601610c3a565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610e4b57607f821691505b602082108103610e5e57610e5d610e07565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f610ebe602883610b6a565b9150610ec982610e64565b604082019050919050565b5f6020820190508181035f830152610eeb81610eb2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f610f2982610c4e565b9150610f3483610c4e565b9250828203905081811115610f4c57610f4b610ef2565b5b92915050565b610f5b81610c13565b82525050565b5f602082019050610f745f830184610f52565b92915050565b5f610f8482610c4e565b9150610f8f83610c4e565b9250828201905080821115610fa757610fa6610ef2565b5b92915050565b5f606082019050610fc05f830186610f52565b610fcd6020830185610cf2565b610fda6040830184610cf2565b94935050505056fea2646970667358221220319c46a9f973f4381f559ead3340bd628b892aeb2c0a0f7ced1e11d675f0d66364736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000315